连接具有相等列的表

时间:2014-12-11 14:28:04

标签: php laravel laravel-4 eloquent

我有两个表userscarscars有一个owner列,它是用户的id,我需要加入它们。 userscars都有一个名为name的列,并且它会覆盖。我希望保留两者,但在返回时使用不同的名称,例如car_nameuser_name

以下是我的工作方式:

$columns = [
    DB::raw('cars.name as car_name')
];

$cars = Cars::join('users', 'users.id', '=', 'cars.owner')->get($columns);

如果我尝试打印car_name但它仍会覆盖名称,如果我打印name,它仍然会返回user而不是car的名称

有没有办法做到这一点?

2 个答案:

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