Php Laravel eloquent-在连接表时防止重写值 好的,我有以下两个模型:Account和Role 和 和数据库表:帐户和角色 现在的问题是:

Php Laravel eloquent-在连接表时防止重写值 好的,我有以下两个模型:Account和Role 和 和数据库表:帐户和角色 现在的问题是:,php,join,laravel,eloquent,Php,Join,Laravel,Eloquent,我需要按role.name列订购accounts。但after join(或leftJoin)值被第二个表中的值覆盖。下面是一些代码: $response = Account::with('role')->leftJoin('group', 'group.id', '=', 'account.group_id')->get(); 之后,在雄辩的集合中,id和name的值是不正确的 另外,当我返回JSON中的响应时,我需要返回的是雄辩的类型模型,这一点很重要,稍后在JS中(解析JSO

我需要按
role.name
列订购
accounts
。但after join(或leftJoin)值被第二个表中的值覆盖。下面是一些代码:

$response = Account::with('role')->leftJoin('group', 'group.id', '=', 'account.group_id')->get();
之后,在雄辩的集合中,
id
name
的值是不正确的

另外,当我返回JSON中的响应时,我需要返回的是雄辩的类型模型,这一点很重要,稍后在JS中(解析JSON之后),我可以只执行
account.role.name

更改表中字段的名称(如:id->account\u id和:id->role\u id)将是一种变通方法,但我的情况并非如此-需要为每个表命名主键
id

[编辑]
是的,所以问题很简单:如何解决这个问题?

您可以像在普通SQL查询中一样使用“选择”:

$response = Account::with('role')
    ->select('account.*')
    ->leftJoin('group', 'group.id', '=', 'account.group_id')
    ->get();

作为对@beech给出的答案的补充,您可以在select子句中使用别名,这样您就只能获取所需的特定密钥,例如

Account::with('role')
    ->select('account.id AS account_id', 'role.id AS role_id', 'account.name AS account_name', 'role.name AS role_name')
    ->leftJoin('group', 'group.id', '=', 'account.group_id')
    ->get();

如果要选择所有字段并避免覆盖特定表,请将其添加为最后一个选择表
->选择('group.*'、'account.*')

$response=Account::with('role'))
->选择('group.*'、'account.*')
->leftJoin('group','group.id','=','account.group_id'))
->get();

好吧,看来所有这些雄辩的魔法都让我着迷了。不管怎样,你让我开心。谢谢,回答被接受:)这救了我一天!
$response = Account::with('role')->leftJoin('group', 'group.id', '=', 'account.group_id')->get();
$response = Account::with('role')
    ->select('account.*')
    ->leftJoin('group', 'group.id', '=', 'account.group_id')
    ->get();
Account::with('role')
    ->select('account.id AS account_id', 'role.id AS role_id', 'account.name AS account_name', 'role.name AS role_name')
    ->leftJoin('group', 'group.id', '=', 'account.group_id')
    ->get();