【问题标题】:laravel: how to use wherePivot in one to many relationshiplaravel:如何在一对多关系中使用 wherePivot
【发布时间】:2018-03-25 21:39:44
【问题描述】:

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

订单

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 where statuses.key = 5 and pivot = table and pivot = language_id 限制 1)

如果 where() 没问题,为什么还有 wherePivot()?
如何正确使用 wherePivot?

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    尝试像这样查询结果:

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

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

    有一个专门用于这些东西的包:Tinker

    【讨论】:

    • 我仍在使用我的状态表。你的答案更适合我,更简单。我用这个: $order->status()->where('table', 'orders')->where('language_id', 1)->first()
    • 很高兴能帮您解决问题。
    【解决方案2】:

    首先,订单和状态之间的关系应该更好地定义在一个不同的表中,比如“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();
    

    希望它有效.. 用我的手机打字

    【讨论】:

    • 谢谢你告诉我withPivot()和wherePivot()的用法
    猜你喜欢
    • 2017-09-11
    • 2015-10-26
    • 1970-01-01
    • 2019-09-11
    • 2021-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-15
    相关资源
    最近更新 更多