我有两个表users
和cars
,cars
有一个owner
列,它是用户的id
,我需要加入它们。 users
和cars
都有一个名为name
的列,并且它会覆盖。我希望保留两者,但在返回时使用不同的名称,例如car_name
和user_name
。
以下是我的工作方式:
$columns = [
DB::raw('cars.name as car_name')
];
$cars = Cars::join('users', 'users.id', '=', 'cars.owner')->get($columns);
如果我尝试打印car_name
但它仍会覆盖名称,如果我打印name
,它仍然会返回user
而不是car
的名称
有没有办法做到这一点?
答案 0 :(得分:1)
我认为你不能做你想要的东西 - 但你可以选择。这应该有用:
$columns = [
'*',
'users.name as user_name',
'cars.name as car_name'
];
$cars = Cars::join('users', 'users.id', '=', 'cars.owner')->select($columns)->get();
答案 1 :(得分:1)
您可以使用select()
clause directly in your query ..无需使用DB::raw()
:
$cars = Cars::join('users', 'users.id', '=', 'cars.owner')
->select('*','cars.name as car_name')
->get();
这样做的问题在于,当您向DB询问所有内容以及具有新名称的字段时,您将最终得到重复列。这对您来说可能不是问题,但最好明确指定您要选择的字段:
$cars = Cars::join('users', 'users.id', '=', 'cars.owner')
->select('users.name as user_name','cars.name as car_name', 'whatever_else')
->get();