【问题标题】:Laravel 4 - Query Builder Left JoinLaravel 4 - 查询生成器左连接
【发布时间】:2023-11-05 08:59:01
【问题描述】:

我想执行 Laravel4 Query Builder Left Join。这是我的代码:

$settings = DB::table('settings')
 ->leftJoin('users', 'settings.user_id', '=', 'users.user_id')->get();

通过这部分代码,我可以从两个数据库表中获取所有字段。我想从 settings 表 中获取所有字段,但只从 users 表 中获取国家和货币字段。有人可以帮我解决这个问题吗?

【问题讨论】:

    标签: join laravel left-join


    【解决方案1】:

    不要使用->get() 来获取所有需要的列,而是使用->select() 来说明您想要哪些列,然后使用get()

    $settings = DB::table('settings')
    ->leftJoin('users', 'settings.user_id', '=', 'users.user_id')
    ->select('settings.*', 'users.country', 'users.currency')->get();
    

    【讨论】:

    • 最后需要 ->get(),我想将结果作为 JSON 响应发送?谢谢。
    • 在这种情况下,您需要在select 之后调用get()
    【解决方案2】:

    您可以试试这个,将get() 中的字段作为数组传递给选择:

    $settings = DB::table('settings')
                  ->leftJoin('users', 'settings.user_id', '=', 'users.user_id')
                  ->get(array('settings.*', 'users.country', 'users.currency'));
    

    使用->select('settings.*', 'users.country', 'users.currency')你仍然需要在最后调用get(),像这样:

    $settings = DB::table('settings')
                  ->leftJoin('users', 'settings.user_id', '=', 'users.user_id')
                  ->select('settings.*', 'users.country', 'users.currency')->get();
    

    【讨论】:

    • 感谢您的回答!