加入

时间:2017-03-30 19:31:22

标签: laravel eloquent

我有一个查询

$orders = DB::table('orders')->where('user_id', $user->id)->get();  

这就是我所看到的:

@foreach ($orders as $order)
   {{ $order->id }}
@endforeach

它打印出1 2 3,因为该表有这三个ID。 但如果我尝试加入,我会得到一个相当不可预测的结果。

$orders = DB::table('orders')->where('user_id', $user->id)->
leftJoin('status', 'orders.status_id', '=', 'status.id')
->get();

它给出2 1 1.结果与rightJoin()和join()相同。

我认为这个命令会将状态表中的行追加到订单表的每一对应行。加入orders.status_id = status.id。 我能得到预期的结果吗?

1 个答案:

答案 0 :(得分:0)

我尝试了->select('orders.*'),但没有改变结果。

但是,我仍然需要将所有内容别名,如此处的评论所示。所以这是我的最终查询。

$orders = User::find($user->id)->orders()->
select('orders.id as order_id', 'status.id as status_id', 
'status.label as label', 'orders.ordered_at as ordered_at')
->leftJoin('status', 'orders.status_id', '=', 'status.id')
->get();

可能这可以用更漂亮的方式完成,但这很有效。 谢谢你评论这篇文章。

UPD:现在,我已经修复了模型之间的关系,我可以做得更简单。如此处所述Laravel Many-to-one relationship

$orders = Order::with('status')->where('user_id', '=', $user->id)->get();