簡體   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