加入同一个表有两个不同的列laravel

问题描述:

我试着在MySQL这些代码:加入同一个表有两个不同的列laravel

SELECT  
    A.*, 
    B.name, 
    C.name 
FROM 
    eventlog_tbl as A 
    LEFT JOIN users B ON A.byuser=B.email 
    LEFT JOIN users C ON A.affectiveuser=C.email; 

我尝试这些在Laravel

return DB::table('eventlog_tbl') 
      ->leftjoin('users', 'users.email', '=', 'eventlog_tbl.byuser') 
      ->leftjoin('users', 'users.email', '=', 'eventlog_tbl.affectiveuser') 
      ->select('eventlog_tbl.*','users.name','users.name') 
      ->get(); 

我怎样才能将其转换为Laravel?

+2

阅读[文档](https://laravel.com/docs/5.5/queries),有去,发布你的代码,我们会从那里帮助。 – fubar

+0

@fubar我怎么可以在laravel中使用这些mysql脚本? –

+0

最野蛮的方式:'DB :: raw()' –

试试下面的代码:

$res = DB::table('eventlog_tbl') 
     ->leftjoin('users AS A', 'A.email', '=', 'eventlog_tbl.byuser') 
     ->leftjoin('users AS B', 'B.email', '=', 'eventlog_tbl.affectiveuser') 
     ->select('eventlog_tbl.*','A.name as byuser_name','B.name as affectiveuser_name') 
     ->get(); 

    print_r($res); 
+0

这是工作非常感谢你 –

这是使用Laravel查询构建器编写的查询。

$events = DB::table('eventlog_tbl') 
    ->select('eventlog_tbl.*', 'users_1.name', 'users_2.name') 
    ->leftJoin('users AS users_1', 'users_1.email', '=', 'eventlog_tbl.byuser') 
    ->leftJoin('users AS users_2', 'users_2.email', '=', 'eventlog_tbl.affectiveuser') 
    ->get(); 

编辑:

$events = DB::table('eventlog_tbl') 
    ->select('eventlog_tbl.*', 'users_1.name AS user_1', 'users_2.name AS user_2') 
    ->leftJoin('users AS users_1', 'users_1.email', '=', 'eventlog_tbl.byuser') 
    ->leftJoin('users AS users_2', 'users_2.email', '=', 'eventlog_tbl.affectiveuser') 
    ->get(); 

的问题是,这两个名字列称为同样的事情。根据已被接受的答案,这些也需要以不同的别名。

+0

我应该在laravel刀片写什么,因为当我写这些,我仍然会得到相同的用户 –

+0

​​通过用户 ​​情感用户 @foreach($事件$值) ​​ \t {{$值 - >名}} \t \t​​ \t {{$值 - >名}} \t @endforeach –
+0

非常感谢你 –

你为什么不将它转换为使用的关系?我可能已经得到了关系错了,这样的事情:

class EventLog extends Model 
{ 
    public function byUser() 
    { 
     return $this->hasOne(User::class, 'byuser', 'id'); 
    } 

    public function affectiveUser() 
    { 
     return $this->hasOne(User::class, 'affectiveuser', 'id'); 
    } 
} 

然后

$event_log = EventLog::with(['byUser', 'affectiveUser')->all(); 


foreach ($event_log as $item) { 
    echo $item->byUser->email(); 
}