iT邦幫忙

0

laravel sql 問題

我有一段 sql 是

select *, (select top 1 name from imglist where id=tableA.id order by cover desc) as picname FROM tableA where ...

想轉成 laravel 中的 model 呼叫
如:
$data_result = tableA_model::where(function($query) use ($input) {
$query->where('city', '=', $input['city'] );
}

怎麼在 laravel 中達到我想要的目的:
取出 tableA 的 item 並一同取出在 imglist 中的 item 的第一張照片存成 picname 跟 tableA 一起回傳?

我知道如果用 DB:select可以達到,只是想問 model 能做這樣的組合嗎?

參考看看DB::raw
kyoe iT邦新手 5 級 ‧ 2019-08-12 10:46:42 檢舉
解決了, 最後用
->select(DB::raw("*,(select top 1 name from imglist where imglist.housen=tableA.housen order by cover desc) as picname"));
就可以了

2 個回答

0
firecold
iT邦新手 4 級 ‧ 2019-08-12 10:44:14
最佳解答

用關聯吧
https://laravel.com/docs/5.8/eloquent-relationships

原本tableA_model
另外建立一個imglist_model

在tableA_model 建立hasOne關聯

建立關聯

public function imglist() {
        return $this->hasOne('Path路徑\model名稱', 'id', 'imglist_id');
}

controller or repository使用

$data_result = tableA_model::with([
    'imglist' => function($q){
        return $q-> orderBy('cover', 'desc')
    }
])->first();
kyoe iT邦新手 5 級 ‧ 2019-08-12 10:46:50 檢舉

解決了, 最後用
->select(DB::raw("*,(select top 1 name from imglist where imglist.housen=tableA.housen order by cover desc) as picname"));
就可以了

firecold iT邦新手 4 級 ‧ 2019-08-12 11:04:04 檢舉

恭喜
不好意思沒幫到什麼還拿最佳

0
小魚
iT邦大師 1 級 ‧ 2019-08-11 09:16:40

剛剛找到一篇
Laravel教學
我也還在學習當中...

我要發表回答

立即登入回答