Php Laravel联接表不返回任何数据

Php Laravel联接表不返回任何数据,php,mysql,join,laravel-5,laravel-5.4,Php,Mysql,Join,Laravel 5,Laravel 5.4,我有两张表订单和送货男孩。我加入了这两个表格,以获取送货员的详细信息 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.pi

我有两张表
订单
送货男孩
。我加入了这两个表格,以获取送货员的详细信息

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\u boy\u id
中有数据时,我将获取所有
订单
,但如果它为空,我将不会获取任何数据

最初,当订单到达时,
订单
交货男孩id
将为空。我想要的数据,即使它是空的加入

我怎样才能做到这一点


谢谢

这是因为默认情况下,
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\u 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 
}
希望这有帮助