Laravel Eloquent 使用 where 查询
Laravel Eloquent query using where
我有两个模型。一个状态和一个 SaleDetails。
Status
------
id
name
slug
我没有定义从 Status 到 SaleDetails 的任何关系。
SaleDetails
-----------
id
id_statuses //connects it to the status table
id_products
price
qty
在模型中:
public function status(){
return $this->belongsTo('App\Status', 'id_statuses', 'id');
}
所以我在这里要做的是获取所有状态与某个 slug 匹配的订单。
例如 dd($this->sale_details->where('status.slug', 'pending')
我用这个:
$orders = $this->sale_details->with('product', 'status')->today()->get();
我应该能够根据前端的状态段过滤它们,但我想直接从这里开始。
解决此问题的最佳方法是什么?
您应该使用 whereHas()
它允许您为要检查的相关模型指定额外的过滤器。
要应用 where 条件,您可以使用 whereHas()
比如,
$status = "pending";
$this->sale_details->whereHas('status', function($q) use ($status){
$q->where('slug', $status);
})->get();
我认为,如果您想要快速处理,比使用 查询构建器 更好
我有两个模型。一个状态和一个 SaleDetails。
Status
------
id
name
slug
我没有定义从 Status 到 SaleDetails 的任何关系。
SaleDetails
-----------
id
id_statuses //connects it to the status table
id_products
price
qty
在模型中:
public function status(){
return $this->belongsTo('App\Status', 'id_statuses', 'id');
}
所以我在这里要做的是获取所有状态与某个 slug 匹配的订单。
例如 dd($this->sale_details->where('status.slug', 'pending')
我用这个:
$orders = $this->sale_details->with('product', 'status')->today()->get();
我应该能够根据前端的状态段过滤它们,但我想直接从这里开始。
解决此问题的最佳方法是什么?
您应该使用 whereHas()
它允许您为要检查的相关模型指定额外的过滤器。
要应用 where 条件,您可以使用 whereHas()
比如,
$status = "pending";
$this->sale_details->whereHas('status', function($q) use ($status){
$q->where('slug', $status);
})->get();
我认为,如果您想要快速处理,比使用 查询构建器 更好