我正在使用Laravel 5.5。我已经编写了完整的CMS和预订系统。我有三张桌子:
因此,在完成许多订单后,Orders表将只包含userid(与Users表中的用户主键对应)和offerid(与Offers表中的商品主键相对应)。
我想在一个视图中按列表(所有订单)一起输出,每行应包含用户数据,方法是在Orders表中的userid中查找User表中用户的主键,并在同一行中提供数据通过其主键查找商品,该主键与订单表中的offerid相对应。
我想通过使用eloquent在控制器函数中构建真正大的多维数组,然后将其传递到所需的视图,但我被困在那里。
有没有选择以这种方式这样做,或者我的想法在这种情况下是非常错误的?
这就是控制器功能的外观:
public function index(){
$allorders=Order::all();
$bigarray=array();
foreach($allorders as $oneorder){
$bigarray[]=array(
'idorder'=>$oneorder->id,
'user'=>User::find($oneorder->userid),
'offer'=>Order::find($oneorder->offerid)
);
}
return view('desiredview...')->with('bigarray',$bigarray);
请不要将雄辩的静态视为错误;我承认我卡在那里,事情是我真的没有想法如何通过我上面描述的方式在视图中输出订单列表。否则,如果我找不到解决方案,我会考虑将所有数据用户和数据放在Orders表中的一行中,但这是一种简单的方法,但是经过一段时间后,当做很多事情时会有点混乱数据。
答案 0 :(得分:1)
使用关系:
在订单模型中:
public function user()
{
return $this->belongsTo(User::class);
}
public function offer()
{
return $this->belongsTo(Offer::class);
}
然后在你的控制器中:
public function index()
{
$allOrders=Order::all();
return view('desired.view', compact('allOrders'));
}
在您看来,您可以循环订单:
<table>
<thead>
<tr>
<th>Order Id</th>
<th>User Name</th>
<th>Offer Name</th>
</tr>
</thead>
<tbody>
@foreach($allOrders as $order)
<tr>
<td>{{$order->id}}</td>
<td>{{$order->user->name}}</td> //Here you have the corresponding User model
<td>{{$order->offer->name}}</td> //Name is just an example, use whatever you want from your model.
</tr>
@endforeach
</tbody>
</table>
在foreach循环中,您拥有User and Offer模型,我建议您阅读关于关系的laravel文档。这很简单,也很好解释。