我有两对一对:
状态>订单
状态>门票
订单
id, status_id
1, 5
票
id, status_id
1, 2
状态
id, table, language_id, key, name
1, 'orders', 1, 1, 'Pending'
2, 'orders', 1, 2, 'Processing'
3, 'orders', 1, 3, 'Shipped'
4, 'orders', 1, 4, 'Canceled'
5, 'orders', 1, 5, 'Complete'
6, 'tickets', 1, 1, 'unanswered'
7, 'tickets', 1, 2, 'answered'
8, 'tickets', 1, 3, 'closed'
//unique(['table', 'language_id', 'key'])
在订单模型中
public function status()
{
//ok
return $this->belongsTo('App\Models\Status', 'status_id', 'key')->where('table', 'orders')->where('language_id', 1);
//not ok
return $this->belongsTo('App\Models\Status', 'status_id', 'key')->wherePivot('table', '=', 'orders')->wherePivot('language_id', '=', 1);
}
控制器
$order = \App\Models\Order::find(1);
dd($order->status);
错误消息:找不到列:1054'where子句'中的未知列'pivot'(SQL:select {from statuses
其中statuses
。key
= 5和{{1 }} = table和pivot
= language_id limit 1)
如果where()没问题,为什么有wherePivot()?
如何正确使用wherePivot?
答案 0 :(得分:0)
答案 1 :(得分:0)
首先,订单和状态之间的关系应该在不同的表中更好地定义,例如'order_status',票证和状态之间的关系应该在表'ticket_status'中
然后你应该像这样定义关系:
在订单模型中
public function status()
{
return $this->belongsToMany('App\Status', 'order_status’, status_id', ‘order_id’)->withPivot('language_id');
}
然后这样称呼:
App\Order::find(1)->status()->wherePivot(‘language_id’, 1)->get();
希望它有效..从我的手机打字