Laravel Eloquent - 查询连接表包含相同的列名

Laravel Eloquent - query joint tables contains a same col name

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

在我的控制器中,我使用 laravel docs 来构建我的查询,因为我需要在 blade 中显示 table ,其中包含 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"}

即使我尝试 select users table 的所有列,如下所示:

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

users.name col 仍然没有显示!

有没有办法在不更改 table 的列标题的情况下解决这个问题?

你可以给列起个别名,避免同名问题

使用这个

$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 ...