2013-06-20 148 views
1

我有多個表。查詢3個表mysql Laravel

  • 比賽
  • 用戶

用戶可以提交作品參加競賽,用戶可以提交多個項的較量。

我需要知道提交參加特定比賽的用戶的電子郵件。電子郵件位於用戶表中。

獲取從比賽的所有條目並不難,我通過實現這一點:

$entries = Contest::find(1)->entries()->first(); 

現在我都屬於競賽爲1的ID(如使用)的條目。現在,我如何以有效的方式從我的用戶表中獲取所有用戶電子郵件?

因此,三張相互關聯的表格,我先從競賽編號開始,然後從比賽中獲取所有參賽作品,然後需要獲取所有用戶的電子郵件,以至於我還沒有得到。

希望這是有道理的。如果沒有,請離開!

+0

[eager loading](http://four.laravel.com/docs/eloquent#eager-loading)呢?像這樣:'比賽:: with('entries.users') - > get() - > first();' –

回答

1
$getUser = Contest::find(1)->users()->get(); 
$getEmails = $getUser->email; 

foreach($getEmails as $getEmail) 
    echo $getEmail; 

你會得到所有的用戶emails對應contest ID 1.但是,首先你必須做在model數據庫關係得到這個工作。

+0

這不起作用,因爲我得到:SQL:SELECT * FROM'users' where'contest_id '=?而我的用戶表顯然沒有contest_id列。或者我在這裏做錯了什麼? –

2

可能更容易使用查詢生成器在這種情況下,而不是雄辯:

// Get array of users that submitted entries to contest ID 45 
$users = DB::table('contests AS c') 
    ->join('entries AS e','e.contest_id','=','c.id') 
    ->join('users AS u','e.user_id','=','u.id') 
    ->where('c.id','=',45) // Contest ID 
    ->get(); 

//or get an array of emails: 
$users = DB::table('contests AS c') 
    ->join('entries AS e','e.contest_id','=','c.id') 
    ->join('users AS u','e.user_id','=','u.id') 
    ->where('c.id','=',45) // Contest ID 
    ->lists('email'); 

在Laravel,雄辯並不總是最好的一切決定。有時查詢生成器更好/更容易。對於簡單的功能和關係來說,口才更爲方便。