2016-09-06 71 views
1

在我的應用程序中,目前有兩個表格:usersemployees。後者只是用於Laravel附帶的樣板表users的簡表。Laravel 5 - 如何在同一張桌子上執行左連接

我有employees裏面有兩個外鍵,一個是user_id,指向id,表users。所以基本上,註冊用戶的配置文件數據。 employees中的第二個外鍵是manager_id。這是員工經理人員的ID。某些用戶是經理,並且有一個空白的manager_id字段。

我想從我的Employee模型檢索該行其中user_id匹配manager_id,然後將它們全部發送到我的看法,他們將在那裏看到first_name和經理的last_name。目前我看到的是經理的ID而不是他們的名字。

+0

爲什麼你有兩個表?難道你不能只添加manager_id到用戶表,並建立用戶表的內部連接? – feareoc

+0

你能否也提供你已經嘗試過的,你現在的代碼? – feareoc

+0

@RasmusRosengren:'$ employees = Employee :: all(); $ manager = Employee :: find(1) - > where('userid','=','manager');' – omrakhur

回答

1

樣品LeftJoin =>

DB::connection('testing')->table('table1 as t1') ->select('t1.column, t2.column') ->leftJoin('table2 as t2','t2.client_id','=','t1.id') ->get();

1

嘗試一些事情是這樣的:

$users = DB::table('users t1') 
->join('users t2', 't1.id', '=', 't2.user_id') 
->select('your column list') 
->get(); 

//這裏我們創建2別名爲用戶表,這使得它自聯接

+0

不應該是'leftJoin'而不是'join'? – omrakhur

+0

這取決於你的條件 –

+0

由於有一些'經理'列有一個空值 – omrakhur

0

在您的員工模型中添加以下方法:

public function manager() 
{ 
    return $this->hasOne('App\User', 'id', 'manager_id'); 
} 

然後就可以得到這樣的經理的名字:

$employee = \App\Employee::find(1); 
$manager = $employee->manager()->first(); 
$manager_name = $manager->name;