我有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
任何指针都会很棒!
答案 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;
放入您的控制器中以查看查询。
享受!