Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用相等列联接表_Php_Laravel_Laravel 4_Eloquent - Fatal编程技术网

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();