繁体   English   中英

laravel:如何在一对多关系中使用wherePivot

[英]laravel: how to use wherePivot in one to many relationship

我有两对一对:
状态>订单
状态>票

命令

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子句”(SQL:SELECT * FROM statuses ,其中statuseskey = 5和pivot =表和pivot = LANGUAGE_ID极限1)

如果where()可以,为什么会有wherePivot()?
如何正确使用wherePivot?

尝试像这样查询结果:

dd($order->status()->where('language_id', 1));

您也可以在模型中使用自定义方法。

有一个专门用于这些东西的软件包: 修补匠

首先,应该在不同的表(例如“ 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();

希望它能工作..用我的手机打字

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM