我有三个表:1)订单2)用户3)服务
订单表包含: - a)user_id b)service_id
用户表包含: - a)名字b)姓氏c)电子邮件
服务表包含:a)service_name
发生的事情是网站上的服务提供商正在添加他的服务,这些服务正在保存在服务表中。然而,用户预订这些服务,并在预订后使用user_id,并且预订的service_id将保存在订单表中。
我所做的是登录服务提供商只能看到在订单表中预订的那些用户详细信息。
为此,我使用下面的代码,使用雄辩: -
$get_result = App\Order::whereIn('user_id',$user_id)->whereIn('service_id',$service_id)->get();
其中$ user_id包含用户ID,$ service_id包含服务ID。这给出了为登录提供者的服务注册的用户的结果。
现在,我面临的问题是我想获取用户详细信息,如firstname,lastname,来自users表的电子邮件和服务表中的服务名称。
我应该如何以雄辩的方式加入这些表格?
现在,我面临的问题是我想获取用户详细信息,如firstname,lastname,来自users表的电子邮件和服务表中的服务名称。
使用eager loading。将此子句添加到您的查询中:
->with(['service', 'user'])
这将为每个Service
加载User
和Order
模型。
确保您已经在Order
模型中定义了关系:
public function user()
{
return $this->belongsTo(User::class);
}
public function service()
{
return $this->belongsTo(Service::class);
}
从现有查询中,使用左连接可以将其扩展为
$get_result = App\Order::whereIn('user_id',$user_id)
->whereIn('service_id',$service_id)
->leftJoin('users', 'orders.user_id', 'users.id')
->leftJoin('services', 'orders.service_id', 'services.id')->get();
如果要选择特定列,可以添加
->select('orders.*', 'users.firstname', 'users.lastname', 'users.email', 'services.name')
如果您不想使用查询进入此路线,您还可以使用预先加载,这会将服务和用户模型添加到您的订单请求中,如此处所述https://laravel.com/docs/5.5/eloquent-relationships#eager-loading