2015-06-05 176 views
0

我有两个表“用户”和“项目”Laravel使用连接查询Laravel雄辩

表用户

----------------------------------- 
user_id | name | email | password | 
----------------------------------- 
    1 |name1 |email1 | password1| 
----------------------------------- 
    2 |name2 |email2 | password2| 

表项目

project_id |user_id | name   | 
-------------------------------------- 
    1  | 1 | project_name1 | 
----------------------------------- 
    2  | 1 | project_name2 | 

有这两个表之间没有关系但项目中的user_id是来自用户表的ID。

普通查询

SELECT a.user_id,a.name AS的用户名,b.name AS PROJECT_NAME FROM用户LEFT JOIN项目B关于a.user_id = b.user_id;

我想在laravel雄辩中执行相同的查询。

在谷歌搜索了一下关于“有”功能,但无法获得输出的想法。

谢谢。

+0

不清楚你的问题是什么。请说明你期望的结果。 – 1010

+0

你使用'DB :: raw'吗? –

+0

@ 1010我需要连接两个表格,我提到的正常查询。我必须在拉拉维尔雄辩中完成相同的输出。例如:使用User :: all()类似的语句。 – PRASANTH

回答

1

这是你应该用雄辩的方式: 创建user.php的

<?php 

class User extends Eloquent 
{ 
    public function projects() 
    { 
     return $this->hasMany('Project'); 
    } 

} 

创建Project.php

<?php 

class Project extends Eloquent 
{ 
} 

在控制器,写这让所有用户,插入每个用户内部相关项目:

$users = User::with('projects')->all(); 
foreach($users as $user) 
{ 
    $project_of_this_user = $user->projects; 
} 
+0

感谢这将有助于关系,但如果我没有用户和项目之间的关系,我怎么能把条件放在哪里。 – PRASANTH

+1

'$ users = User :: with('projects') - > where('email','=','[email protected]') - > get();'OR '$ users = User :: where('email','=','[email protected]') - > get();' – RY35

+0

感谢它开始工作。 – PRASANTH

1

这应该是你所需要的:

DB::table('users') 
    ->join('projects', 'projects.user_id', '=', 'users.user_id') 
    ->select('users.user_id', 'users.name as username', 'projects.name as project_name') 
    ->get(); 
+0

我已经试过这些,正在工作。我需要用laravel模型来做。我为'用户'创建了用户模型类,为'项目'创建了项目类 – PRASANTH

2

你可以简单地做如下,

DB::table('users') 
     ->join('projects =', 'users.id', '=', 'posts.user_id') 
     ->select('*') 
     ->get(); 

欲了解更多详细信息,您可以参考laravel Docs

1

我想,这一个帮助你out

DB::table('users') 
      ->leftJoin('projects', 'users.user_id', '=', 'projects.user_id') 
      ->select('users.user_id', 'users.name as username', 'projects.name as project_name') 
      ->get();