Php 使用相等列联接表
我有两个表Php 使用相等列联接表,php,laravel,laravel-4,eloquent,Php,Laravel,Laravel 4,Eloquent,我有两个表users和cars,cars有一列owner,这是用户的id,我需要加入它们。users和cars都有一个名为name的列,它被覆盖。我想保留两者,但名称不同,如返回时的car\u name和user\u name 我是这样做的: $columns = [ DB::raw('cars.name as car_name') ]; $cars = Cars::join('users', 'users.id', '=', 'cars.owner')->get($column
users
和cars
,cars
有一列owner
,这是用户的id
,我需要加入它们。users
和cars
都有一个名为name
的列,它被覆盖。我想保留两者,但名称不同,如返回时的car\u name
和user\u name
我是这样做的:
$columns = [
DB::raw('cars.name as car_name')
];
$cars = Cars::join('users', 'users.id', '=', 'cars.owner')->get($columns);
如果我尝试打印car\u name
,但它仍然覆盖名称,如果我打印name
,它仍然返回用户的名称,而不是car
有什么方法可以做到这一点吗?我认为你不能用gets做你想做的事,但你可以用select。希望这能起作用:
$columns = [
'*',
'users.name as user_name',
'cars.name as car_name'
];
$cars = Cars::join('users', 'users.id', '=', 'cars.owner')->select($columns)->get();
你可以用。。无需使用DB::raw()
:
这样做的问题是,当您向DB请求所有内容时,您将得到一个重复的列,以及一个具有新名称的字段。这对您来说可能不是问题,但最好明确指定要选择的字段:
$cars = Cars::join('users', 'users.id', '=', 'cars.owner')
->select('users.name as user_name','cars.name as car_name', 'whatever_else')
->get();
如果为users.name添加和别名?不行?我不明白你的意思。我意识到在这个问题上有一个错误,我将进行编辑。你有car.name DB::raw('cars.name as car_name')的别名,我想你也可以对users做同样的操作。name DB::raw('users.name as user_name'),我不知道eloquent,但它就像一个SQL查询
$cars = Cars::join('users', 'users.id', '=', 'cars.owner')
->select('users.name as user_name','cars.name as car_name', 'whatever_else')
->get();