我有2个表orders
和delivery_boys
。我已加入这两张表来获取送货员的详细信息
public function index()
{
$orders = Order::join('delivery_boys', 'delivery_boys.id', 'orders.delivery_boy_id')
->select('orders.id', 'name', 'phone_number', 'orders.address', 'orders.city', 'orders.pincode', 'delivery_time_slot', 'total', 'delivery_boys.name as delivery_boy')
->get();
return view('pages.orders', compact('orders'));
}
当orders
中有数据时,我收到所有delivery_boy_id
,但是如果它是空的,我没有收到任何数据。
最初,当订单进入时,orders
表格delivery_boy_id
将为空。我想要数据,即使它是连接的空白。
我怎样才能做到这一点?
谢谢
答案 0 :(得分:1)
这是因为默认情况下join
会产生内连接。内部联接意味着它只会检索两侧都有数据的行。
您所追求的是左连接:
public function index()
{
$orders = Order::leftJoin('delivery_boys', 'delivery_boys.id', 'orders.delivery_boy_id')
->select('orders.id', 'name', 'phone_number', 'orders.address', 'orders.city', 'orders.pincode', 'delivery_time_slot', 'total', 'delivery_boys.name as delivery_boy')
->get();
return view('pages.orders', compact('orders'));
}
或者,您也可以为此设置关系:
假设您有delivery_boys
的模型,则只需将以下方法添加到Order
模型中:
public function deliveryBoy()
{
return $this->belongsTo(DeliveryBoy::class);
}
获取订单:
$orders = Order::with('deliveryBoy')->get();
最后,要访问有关分娩男孩的信息:
foreach ($orders as $order) {
$order->deliveryBoy->name; //To get the delivery boy's name
}
希望这有帮助!