2 回答
TA贡献1725条经验 获得超7个赞
你已经非常接近了,但是当你需要在括号之间有条件时,你的 where() 函数应该是一个回调。
例如(product.title like '%$keyword%' OR product.content like '%$keyword%' OR product.price like '%$keyword%' OR product.quantity like '%$keyword%') 将是
$query->where(function($subquery) use($keyword) {
$subquery->where('title', 'like', "%{$keyword}%")
->orWhere('content', 'like', "%{$keyword}%");
});
这只是您的要求的一个粗略示例,但您应该得到它。
正如您所知,您可以组合几乎所有 Eloquent 功能。
祝你好运!
TA贡献1836条经验 获得超4个赞
您可以在方法内部传递一个闭包where
。闭包将接收一个查询生成器实例,您可以使用它来设置应包含在括号内的约束。
这被称为parameter grouping
。
https://laravel.com/docs/7.x/queries#parameter-grouping
将您的声明更改为此。
$data = DB::table('product')
->select('product.id','product.title','product.description','product.content','product.photo','product.quantity','product.price')
->join('product_per_category','product_per_category.product_id','=','product.id')
->where(['product.deleted' => 0])
->where(['product_per_category.deleted' => 0])
->where(['product_per_category.productcategory_id' => $id])
->where(function($query) use($keyword){
$query->where('product.content', 'like', '%' . $keyword . '%')
->orWhere('product.title', 'like', '%' . $keyword . '%')
->orWhere('product.quantity', 'like', '%' . $keyword . '%')
->orWhere('product.price', 'like', '%' . $keyword . '%');
})
->groupBy('product.id')
->get();
- 2 回答
- 0 关注
- 130 浏览
添加回答
举报