laravel - 带有 Join 和 If 条件的 Laravel 查询生成器
问题描述
如何在查询生成器的结果中使用 if else 条件?
$data = DB::table('peminjaman')
->select('peminjaman.id as id_peminjaman',
'reads.pageread',
'books.*',
'pengarang.name as pengarang_name'
)
->join('reads','reads.id_book','peminjaman.id_book')
->join('books','books.id','=','reads.id_book')
->join('pengarang','pengarang.id','=','books.idpengarang')
->where('peminjaman.id_user',$user->id)
->orderBy($sort,$urut)
->get();
我想使用一些这样的条件,在实际情况下会有很多其他的地方,以及用于我上面声明连接的表格
if($statment=="notread"){
where('reads.pageread', '=',0);
}
if($statment=="read"){
where('reads.pageread', '=',1);
}
if($statment=="bigbook"){
where('books.bigbook', '=',1);
}
解决方案
只需复制粘贴您的查询并进行一些修饰,这就是结果。只需改进您的查询生成器,以防您想让它更复杂
$data = DB::table('peminjaman')
->select(
'peminjaman.id as id_peminjaman',
'reads.pageread',
'books.*',
'pengarang.name as pengarang_name'
)
->join('reads', 'reads.id_book', '=', 'peminjaman.id_book')
->join('books', 'books.id', '=', 'reads.id_book')
->join('pengarang', 'pengarang.id', '=', 'books.idpengarang')
->where('peminjaman.id_user', $user->id)
->when($statement, function($query, $statement){
if($statement === 'notread'){
return $query->where('reads.pageread', 0);
} elseif($statement === 'read'){
return $query->where('reads.pageread', 1);
} elseif($statment=="bigbook"){
return $query->where('books.bigbook', 1);
}
})
->orderBy($sort, $urut)
->get();
推荐阅读
- javascript - Firebase 数据重复问题
- css - 如何在台式机、平板电脑和移动设备上获得相同的显示
- android-studio - Android 绘制路径出现意外结果
- c# - 如何清除 System.Random 种子?
- c - 使用 GetFileVersionInfo 和 VerQueryValue 获取 Windows 10 的完整版本号时出现问题
- ios - Firebase 电话身份验证非常慢
- regex - 匹配不包括文字星号的字符串
- c# - Winforms Timer 不打勾的任何原因?
- python - 在 Python 中打印函数输出
- css - 如何将 CSS 应用到 md-cell 内的 mdTooltip