通过在Laravel 5.5中组合另外两个数据库来输出

时间:2017-12-26 02:09:44

标签: database laravel

我正在使用Laravel 5.5。我已经编写了完整的CMS和预订系统。我有三张桌子:

  • 优惠表,其中包含每项优惠的所有必要信息(优惠可由CMS管理)
  • 用户表,其中包含所有客户数据
  • 和一个Orders表,它具有管理员的特定角色,可以查看谁订购了什么(此订单表只有三列:id,offerid和userid - >这非常重要,因为我将预订系统编码为 - >当订单生成时,Orders数据库被置为offerid(这是Offers表中商品的主键),而userid列是put number,这是Users表中用户的主键。)

因此,在完成许多订单后,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表中的一行中,但这是一种简单的方法,但是经过一段时间后,当做很多事情时会有点混乱数据。

1 个答案:

答案 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文档。这很简单,也很好解释。