Laravel连接表不返回任何数据

时间:2017-07-15 10:41:45

标签: php mysql join laravel-5 laravel-5.4

我有2个表ordersdelivery_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将为空。我想要数据,即使它是连接的空白。

我怎样才能做到这一点?

谢谢

1 个答案:

答案 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 
}

希望这有帮助!