在Laravel中,如何基于与该表具有关系的表之一的值拒绝查询中的记录?
例如,我有“产品”表和“类别”表。类别表具有一对多关系,一个类别可以具有许多产品。类别表为is_visible is_deleted。如何在“产品”表上进行查询,以使其拒绝属于并具有is_visible = false或is_deleted = true字段类别的产品?
我尝试过这样的事情:
$products = ProductTable::join('product_category_tables', 'product_category_tables.id', '=', 'product_tables.id')
->where('product_category_tables.is_visible', '=', true)
->where('product_category_tables.is_deleted', '=', false)
->where('product_tables.is_visible', '=', true)
->where('product_tables.is_deleted', '=', false)
->paginate(50);
但是从这个查询中我只有一条记录。我无法在“类别”表上进行此查询,因为我只希望获得25/50/100的分页产品。
答案 0 :(得分:0)
如果您正在使用Laravel Modal(Eloquent),并且已经在Product
和Category
模型中正确定义了一对多关系。那么您可以通过以下查询来实现:
$products = Product::where("is_visible", true)
->where("is_deleted", false)
->whereHas('category', function($categories){
$categories->where("is_visible", true)
->where("is_deleted", false);
})
->get();
在Product
模型中,您应将关系定义为以下波纹:
public function category()
{
//From your mentioned query I am seeing that
//product table's id is actually categories table's id(which should not be like this though),
//so the relationship is
return $this->belongsTo(Category::class, 'id');
}