【问题标题】:Laravel joining tables returns no dataLaravel 连接表不返回数据
【发布时间】:2017-07-15 10:41:44
【问题描述】:

我有 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'));
}

delivery_boy_id 中有数据时,我会得到所有的orders,但如果它是空的,我就不会得到任何数据。

最初收到订单时,ordersdelivery_boy_id 将为空。我想要数据,即使它是空的也可以加入。

我怎样才能做到这一点?

谢谢

【问题讨论】:

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


    【解决方案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 
    }
    

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 2021-09-29
      • 2018-06-14
      • 2015-10-02
      • 2018-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-11
      • 2019-08-11
      相关资源
      最近更新 更多