2016-09-06 115 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;