php - Laravel - 如何使用 Query Builder 或 Eloquent 添加 JOIN 和 CASE-WHEN?
问题描述
我有以下工作的原始 SQL 语句,我发现使用 Laravel/Query Builder/Eloquent 将其转换为 PHP 非常困难。
SELECT aa.filepath,
aa.filename,
inst.instrument,
rl.raga,
ks.keysig,
aa.id AS AAID,
likes.id AS LikesID
FROM (audioassets aa)
INNER JOIN instruments inst
ON aa.instrument_id = inst.id
INNER JOIN keysigs ks
ON aa.keysig_id = ks.id
LEFT JOIN ragalist rl
ON aa.raga_id = rl.i
LEFT JOIN likes
ON aa.id = likes.audioassets_id
AND CASE likes.user_id
WHEN 1 THEN true
ELSE false
END
WHERE ks.keysig LIKE '%'
AND inst.instrument LIKE '%';
我的笔记:
我遇到的问题是试图让 CASE-WHEN 代码在 Laravel 中工作
“WHEN”后面的“1”是一个变量,所以现在只是为了测试
我要做的就是在“仪表板”上显示文件列表并显示当前登录的用户“喜欢”了哪些文件(没有其他人喜欢)
这是我的 Laravel Eloquent 代码:
$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')
->leftjoin('likes', 'likes.audioassets_id', '=', 'audioassets.id')
->where('likes.user_id', '=', $authuserid)
->select('audioassets.filepath', 'audioassets.filename',
'instruments.instrument', 'ragalist.raga', 'keysigs.keysig', 'audioassets.id', 'likes.id as likesid');
这在 Laravel 中运行良好,但不包含 CASE-WHEN SQL,因此所有“喜欢”都会显示给所有用户。
任何帮助将不胜感激!
解决方案
您可以尝试以下查询
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();
推荐阅读
- c - 如何捕捉对 exit() 的调用(用于单元测试)
- class - 如何在 Lisp 中创建具有 n 个可能值的类型
- python - Python,同时将类创建附加到列表中
- r - 概率数不正确
- google-sheets - Google 电子表格中工作表的排序是否应该是全局的?
- c++ - 一个向量索引处的多个值
- react-native - 无法在 react-native-map 中安装 google map pod
- python - PIL Python,掩盖图像而不丢失原始图像的某种颜色
- reactjs - 如何使用 id 从 firebase 实时数据库中删除数据?
- javascript - 如何在javascript中按字母顺序列出已经映射的数组?