2017-10-17 113 views
0

我試着在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()' –

回答

3

試試下面的代碼:

$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

這是工作非常感謝你 –

1

這是使用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

非常感謝你 –

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(); 
} 
相關問題