我有一个查询
$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。 我能得到预期的结果吗?
答案 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();