【问题标题】:Eloquent multiple joins in laravellaravel中雄辩的多重连接
【发布时间】:2018-06-03 23:45:15
【问题描述】:

我有三张桌子: 1) 订单 2) 用户 3) 服务

订单表包含:- a) 用户 ID b) service_id

用户表包含:- a) 名字 b) 姓氏 c) 电子邮件

服务表包含: a) 服务名称

正在发生的事情是网站上的服务提供商正在添加他的服务,并且这些服务正在保存在服务表中。然而,用户预订了这些服务,预订后它的 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。这给出了那些注册登录提供商服务的用户的结果。

现在,我面临的问题是我想从用户表中获取用户详细信息,例如名字、姓氏、电子邮件,从服务表中获取服务名称。

我应该如何在 eloquent 中加入这些表?

【问题讨论】:

    标签: php laravel eloquent


    【解决方案1】:

    现在,我面临的问题是我想从用户表中获取名字、姓氏、电子邮件和服务表中的服务名称等用户详细信息。

    使用eager loading。将此子句添加到您的查询中:

    ->with(['service', 'user'])
    

    这将为每个Order 加载ServiceUser 模型。

    确保您已在 Order 模型中定义了关系:

    public function user()
    {
        return $this->belongsTo(User::class);
    }
    
    public function service()
    {
        return $this->belongsTo(Service::class);
    }
    

    【讨论】:

    • 谢谢!我做过这样的事情:- class Order extends Model { public function user() { return $this->belongsTo(User::class); } 公共函数 service() { return $this->belongsTo(Service::class); } }
    • 刀片文件中调用的之后:- $get_details = App\Order::with(['service', 'user'])->get();我确实收到了结果。
    • 但现在我正在应用 foreach 循环。我将如何在那里展示它。我正在使用 {{ $details->first_name}} {{ $details->email}} {{ $details->title}} 在 foreach 循环中
    • 很高兴它有帮助。但是你shouldn't run queries in Blade templates。要迭代结果,请使用foreach。例如@foreach($results as $item) {{ $item->user->email }} @endforeach
    【解决方案2】:

    从您现有的查询中,使用左联接可以将其扩展到

    $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')
    

    如果您不想通过查询走这条路线,您也可以使用预加载,这会将 Service 和 User 模型添加到您的订单请求中,如此处所述https://laravel.com/docs/5.5/eloquent-relationships#eager-loading

    【讨论】:

      猜你喜欢
      • 2014-07-01
      • 2020-11-16
      • 2019-06-09
      • 2018-02-10
      • 2022-01-15
      • 1970-01-01
      • 2018-06-02
      • 2021-09-15
      • 2014-08-15
      相关资源
      最近更新 更多