我正在使用Laravel 5.6,并且有一个标准查询
Order::where('dict_statuses_id', 1)
->leftJoin('dict_statuses', 'dict_statuses_id', '=', 'dict_statuses.id')
->get();
所以我有订单列表,其中在加入表后状态为1(新)的详细信息,我将状态视为“新建”或“完成”。有什么办法可以使用whereHas更改此查询?
我尝试使用
Order::whereHas('status', function($q){
$q->where('dict_statuses_id', 1);
})->get();
但是没有结果,在我的模型订单中
public function status()
{
return $this->hasMany('App\DictStatuses');
}
[已更新]
我有一个错误:
Column not found: 1054 Unknown column 'dict_statuses.orders_id'
in 'where clause' (SQL: select * from `orders` where exists
(select * from `dict_statuses` where `orders`.`id` = `dict_statuses`.`orders_id` and `dict_statuses_id` = 1)
and `orders`.`deleted_at` is null)
在我的表中,我有表 Orders (订单),其中字段为: dict_statuses_id 和表 dict_statuses ,其中的字段为: id , public_name
为什么出错有关 dict_statuses.orders_id
答案 0 :(得分:0)
您可以将变量传递给关系,以便有可能这样做。
public function status($id) {
return $this->hasMany(DictStatuses::class)->where('dict_statuses_id', $id);
}
尝试定义本地键和外键。
$this->hasMany(DictStatuses::class, 'foreign_key', 'local_key');
答案 1 :(得分:0)
尝试Order :: has('status')-> get();
答案 2 :(得分:0)
我认为您的dict_statuses
没有名为order_id的列。
请在您的迁移中包括该列
然后致电
Order::whereHas('status', function($q){
$q->where('dict_statuses_id', 1);
})->get();
在您的控制器中
或将订单模型中的关系更改为
public function status(){
return $this->belongsTo('App\DictStatuses'):
}