2015-06-05 115 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();