【问题标题】:Laravel Eloquent - query joint tables contains a same col nameLaravel Eloquent - 查询连接表包含相同的列名
【发布时间】:2019-01-03 21:38:32
【问题描述】:

在使用两个相关的表 usersroles 查看从数据库调用的数据时,我考虑了一个问题,它们具有以下结构:

  • users.role 列包含一个整数,引用roles 表的角色记录
  • roles.name 列包含角色名称,即(用户/管理员/编辑)

在我的控制器中,我使用了 laravel docs 来构建我的查询,因为我需要在刀片中显示一个包含 users.nameusers.emailroles.name 的表,这些表与架构中的用户相关:

$users = DB::table('users')
        ->join('roles', 'users.role', '=', 'roles.id')
        ->select('users.name', 'users.email', 'roles.name')
        ->get();

实际上它可以工作并转储数据,但问题是混淆了两个名称相似的 cols users.nameroles.name。它只转储roles.name 值,如下示例记录:

{"name":"user","email":"user@asd.com"},{"name":"user","email":"new@asd.com"},{"name":"user","email":"jaeden93@example.org"}

即使我尝试选择users 表的所有列,如下所示:

$users = DB::table('users')
        ->join('roles', 'users.role', '=', 'roles.id')
        ->select('users.*', 'roles.name')
        ->get();

users.name col 仍未显示!

有没有办法在不更改表格列标题的情况下解决此问题?

【问题讨论】:

  • ->select('users.*', \DB::raw('roles.name as role_name')) 是一个选项吗?
  • 有效!但你能在答案中解释更多吗?

标签: php laravel-5 eloquent laravel-5.4 laravel-blade


【解决方案1】:

您可以为列指定别名,以避免同名出现问题

使用这个

$users = DB::table('users')
    ->join('roles', 'users.role', '=', 'roles.id')
    ->select('users.*', \DB::raw('roles.name as role_name'))
    ->get();

在 SQL 中也是一样的

SELECT users.*, roles.name as role_name FROM ...

【讨论】:

  • 我尝试美化代码而不是输入DB::raw('roles.name as role_name') 我只输入了'roles.name as role_name',它也可以正常工作
猜你喜欢
  • 2015-02-27
  • 2021-12-17
  • 1970-01-01
  • 1970-01-01
  • 2015-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多