2015-01-15 38 views
0

我目前正在構建一個項目/學習laravel。從兩個表中的數據的foreach laravel

我有兩個數據庫與一個colomn在兩個表中具有相同的唯一值。

在我的刀片頁我有過第一臺循環一個foreach,但我無法弄清楚如何得到它的正確與它等

帶來第二表數據這裏是代碼。

我的resturants模型。

class Restaurant extends Eloquent implements UserInterface, RemindableInterface { 

use UserTrait, RemindableTrait; 

protected $table = 'restaurants'; 

public function reviews() 
{ 
    return $this->hasMany('restaurant_id'); 
} 

評價模型

class Review extends Eloquent implements UserInterface, RemindableInterface { 

use UserTrait, RemindableTrait; 

/** 
* The database table used by the model. 
* 
* @var string 
*/ 
protected $table = 'reviews'; 


public $review; 

public function reviews() 
{ 
    return $this->hasMany('restaurant_id'); 
} 

刀片foreach循環

@foreach(array_slice($restaurants, 0, 5) as $restaurants) 

{{$restaurant[0]->restaurant_id}}} 

{{$reviews= Review::find(1)->where('restaurant_id', '=', $restaurant[0]->restaurant_id)->get()}} 

@emdforeach 

控制器將數據傳遞精做生病排除。

我想獲得相關審查以及餐廳等對象

任何想法傳遞?

,如果你看到任何錯別字的藉口,因爲我不得不重新輸入一臺筆記本電腦和臺式機的代碼是好的:)

UPDATE

非常感謝你的幫助,你的解釋後,我明白這樣的感謝:)

無論如何,當我嘗試它我試圖獲得非對象的屬性。

這裏是更新的代碼

餐廳模型

class Restaurant extends Eloquent implements UserInterface,  RemindableInterface { 

use UserTrait, RemindableTrait; 

/** 
* The database table used by the model. 
* 
* @var string 
*/ 
protected $table = 'restaurants'; 


public $restaurant; 



public function reviews() 
{ 
return $this->hasOne('Review', 'restaurant_id',); 
} 

在我看來

V {{DD($餐館,>評論)}}

這給了我嘗試獲得非客體的財產。

$餐館完美的作品完全不與評論?我可以DD一下,看看陣列

回答

0

在5個對象。如果你有一個$restaurant的實例,你可以得到一個集合的它的評論是這樣的:

$reviews = $restaurant->reviews; 

由於這是一個多對多關係它返回一個集合,你現在可以@foreach在此集合,以及:

@foreach(array_slice($restaurants, 0, 5) as $restaurants) 

    {{ $restaurant[0]->restaurant_id }} 

    @foreach($restaurant->reviews as $review) 
     {{ $review->rating }} 
    @endforeach 

@endforeach 

因爲你定義的這個方法對餐飲模型reviews屬性存在:

public function reviews() 
{ 
    return $this->hasMany('restaurant_id'); 
} 

以這種方式訪問​​相關屬性與documentation中給出的第一個示例類似。如果您想查看源代碼並查看發生了什麼,則只要您訪問未在類中明確定義的模型屬性(即不是$fillable$guarded,但是任何數據屬性,關係訪問像屬性等)。

相反,如果你有一個Chef模型和數據庫結構,其中一間餐廳可以有許多廚師和你在餐廳模型中定義的這個方法:

public function chefs() 
{ 
    return $this->hasMany('Chef'); 
} 

然後,你可以得到所有的廚師的清單在這樣的餐廳:

$chefs = $restaurant->chefs; 

您也可以直接調用該方法,舉例來說如果你想進一步限制添加到查詢:

$chefsNamedBob = $restaurant->chefs()->where('name', '=', 'Bob')->get(); 

請注意,當以這種方式調用時,您將不得不調用->get()->first(),當嘗試通過實例的屬性而不是實例的方法訪問關係時,這是不同的。這是因爲當您調用該方法時,查詢尚未執行(這就是get()所做的)。當您將關係作爲屬性訪問時,在收到結果時,查詢已經執行(意味着SQL沒有更多時間爲您執行過濾)。

更新

我也注意到,你有你的關係錯誤。定義你的餐廳,審查這樣的關係:

return $this->hasMany('restaurant_id'); 

的第一個參數hasMany功能列名。通常,關係函數的函數簽名是:

return $this->hasOne('ModelClassName', 'foreign_key', 'local_key'); 

有關更多信息,請參閱documentation。如果你是以下雄辯公約(複數表名,ID作爲主鍵,外鍵的名稱是正確的),那麼你可以使用一個快捷方式,只需指定型號類別名稱:

return $this->belongsToMany('ModelClassName'); 

這是一個偉大的理由遵循慣例。

+0

非常感謝您的幫助,在您的解釋後,我明白了,謝謝:) – user1529597

+0

np,很樂意提供幫助。祝你的項目好運! –

+0

即使我以爲我現在得到它也沒有工作.. – user1529597

相關問題