3 回答

TA貢獻1826條經驗 獲得超6個贊
您可以嘗試以下查詢
myFriendsData = DB::table('audioassets as aa')
->where('ks.keysig', 'LIKE', '%')
->join('instruments', 'audioassets.instrument_id', '=', 'instruments.id')
->leftjoin('ragalist', 'audioassets.raga_id', '=', 'ragalist.id')
->join('keysigs', 'audioassets.keysig_id', '=', 'keysigs.id')
->join('likes ',audioassets.id = likes.audioassets_id, function() {})
->whereRaw(
'(
CASE
WHEN likes.user_id = 1 THEN true ELSE false
END
)'
)
->select('audioassets.filepath', 'audioassets.filename','instruments.instrument', 'ragalist.raga', 'keysigs.keysig', 'audioassets.id', 'likes.id as likesid');
->get();

TA貢獻1798條經驗 獲得超3個贊
您可以使用提前連接子句和DB::raw():
<?php
$query = \App\Audioassets::where('instruments.instrument', 'LIKE', "%$ddinstselected%")
->where('keysigs.keysig', 'LIKE', "%$ddkeyselected%")
->join('instruments', 'audioassets.instrument_id', '=', 'instruments.id')
->leftjoin('ragalist', 'audioassets.raga_id', '=', 'ragalist.id')
->join('keysigs', 'audioassets.keysig_id', '=', 'keysigs.id')
// Use join clause.
->leftJoin('likes', function ($join) {
$join->on('aa.id', '=', 'likes.audioassets_id')
// CASE WHEN by DB::raw()
->on(DB::raw('CASE likes.user_id WHEN 1 THEN true ELSE false'));
)
->where('likes.user_id', '=', $authuserid)
->select(
'audioassets.filepath',
'audioassets.filename',
'instruments.instrument',
'ragalist.raga',
'keysigs.keysig',
'audioassets.id',
'likes.id as likesid'
);
連接子句 API 參考:Illuminate\Database\Query\JoinClause | Laravel API

TA貢獻1817條經驗 獲得超6個贊
我沒有回過頭來回復這個帖子中的所有偉大幫助者,但答案是上面提供的兩個答案的混合。這是完美運行的最終代碼:
$query = \App\Audioassets::where('instruments.instrument', 'LIKE', "%$ddinstselected%")
->where('keysigs.keysig', 'LIKE', "%$ddkeyselected%")
->leftJoin('likes', function ($join) use ($authuserid) {
$join->on('audioassets.id', '=', 'likes.audioassets_id');
$join->whereRaw(
'(
CASE
WHEN likes.user_id=? THEN true ELSE false
END
)'
, [$authuserid]);
})
->join('instruments', 'audioassets.instrument_id', '=', 'instruments.id')
->leftjoin('ragalist', 'audioassets.raga_id', '=', 'ragalist.id')
->join('keysigs', 'audioassets.keysig_id', '=', 'keysigs.id')
->select('audioassets.filepath', 'audioassets.filename', 'instruments.instrument', 'ragalist.raga', 'keysigs.keysig', 'audioassets.id', 'likes.id as likesid');
- 3 回答
- 0 關注
- 175 瀏覽
添加回答
舉報