簡體   English   中英

Laravel 5.2 hasManyThrough關系問題

[英]Laravel 5.2 hasManyThrough relationship issue

我有3張桌子:訂單,代碼,事件

我希望能夠提取訂單中的所有事件,但是有一個中間表充當數據透視表。 我一直在嘗試使用hasManyThroughbelongsToMany (以及withPivot ),但沒有任何運氣。

例子:

public function events()
{
    return $this->belongsToMany('events'); // tried this, fails
    return $this->hasManyThrough('events', 'codes'); // tried this, fails
    return $this->hasManyThrough('events', 'codes', 'event_id', 'id'); // tried this, fails
}

任何指針都很棒!

示例圖片

那是一個belongsToMany設置。 首先,第一個參數是相關類的名稱。 其次,由於數據透視表不遵循Laravel命名約定,因此需要在關系定義中指定數據透視表的名稱:

public function events()
{
    // first parameter is the name of the related class
    // second parameter is pivot table name
    return $this->belongsToMany(Event::class, 'codes');
}

使用此設置,您可以執行以下操作:

// get an order
$order = Order::first();

// has all the events related to an order
$events = $order->events;

有很多方法可以做到這一點。 我將展示一個您可以完成的任務。

Order.php模型中

public function codes(){
   return $this->has('App\Http\Code');
}

Code.php模型中

public function orders(){
   return $this->belongsTo('App\Http\Order');
}

public function events(){
   return $this->hasMany('App\Http\Event');
}

Event.php模型中

public function codes(){
   return $this->belongsTo('App\Http\Code');
}

然后在Controller中,調用它們以獲取所需的數據。

您可以按照以下方式進行操作:

$orders = Order::with(['codes' => function($q){
    $q->with('events');
})->get();

也許您可以嵌套的方式獲取它們(不確定這一點,因為我在發布之前沒有嘗試過):

$orders = Order::with('codes.events')->get();

放置return $orders; 在您的控制器中查看查詢。

請享用!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM