Laravel 5.2有很多关系问题

时间:2016-02-25 05:04:07

标签: php laravel laravel-5 eloquent laravel-5.2

我有3个表:订单,代码,事件

我希望能够提取订单所有的所有事件,但是有一个中间表充当数据透视表。我一直试图使用for (int col = 1; col <= node.cols; col++ ) { for (int row = 1; row <= node.rows; row ++ ) { printf(" %d", col*row); } printf("\n"); } hasManyThrough(以及belongsToMany)而没有任何运气。

示例:

withPivot

任何指针都会很棒!

example image

2 个答案:

答案 0 :(得分:3)

那是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;

答案 1 :(得分:0)

有很多方法可以做到这一点。我将展示一个你可以完成它的工作。

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;放入您的控制器中以查看查询。

享受!