2015-01-17 53 views
0

我建立一個學院項目的foreach,我無法通過數據從主表/類第二表通過。不能穿過第二個表數據laravel

當我試圖通過它和訪問它在視圖中我得到一個嘗試訪問非對象錯誤。

這是我下面的代碼。

健身房類

class Gym extends Eloquent implements UserInterface, RemindableInterface { 

use UserTrait, RemindableTrait; 
*/ 
protected $table = 'gyms'; 

public $gym; 

public function reviews() 
{ 
return $this->hasMany('Review', 'unique_gym_id'); // represents the Review class 
} 

頁控制器相關的部分,我通過數據從這個循環到視圖。

foreach($gymsearchs as $gymsearch) 
{ 

    Gym::save($gymsearch); 
    $gyms[] = DB::table('gyms')->where('unique_gym_id', '=', $gymsearch->unique_gym_id)->get(); 
    Review::review($gymsearch); 
    $reviews[] = DB::table('reviews')->where('unique_gym_id', '=', $gymsearch->unique_gym_id)->get(); 


} 

//dd($reviews); this shows the full review object contents fine 
    $data = array_add($data, 'gyms', $gyms, 'reviews', $reviews); 

視圖

@foreach(array_slice($gyms, 0, 5) as $gym) 
    {{$gym->name}} // works fine and with other objects from the $gym 
@endforeach 



@foreach(array_slice($gyms, 0, 5) as $gym) 
    {{$gym->review}} // this gives me a trying to access non object error. 
@endforeach 

兩個健身房模型和審查模式已經unique_gym_id作爲列

我想在健身房模型這一審查類應該有布拉夫與$審查表數據健身房?

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

任何想法我失蹤了?由於我是新手,以laravel和PHP

+0

$數據= array_add($數據, '體育館',$體育館, '評論',$條); - 更好地使用 $ data = $ data + ['gyms'=> $ gyms,'reviews'=> $ reviews]; – maxpovver

+0

酷感謝,因爲即時通訊新手你能告訴我爲什麼:) – user1529597

+0

更清晰的代碼效果更好。關於你的問題 - 也許你可以添加更多的細節? – maxpovver

回答

1

你告訴它是一個的hasMany關係,所以它不應該是「{{$ gym->評論}}」呢?還沒有嘗試過,但似乎很奇怪。此外,這應該返回一個數組而不是一個單一的對象,所以你必須迭代它。

編輯:

這整個一節:

foreach($gymsearchs as $gymsearch) 
{ 
    Gym::save($gymsearch); 
    $gyms[] = DB::table('gyms')->where('unique_gym_id', '=', $gymsearch->unique_gym_id)->get(); 
    Review::review($gymsearch); 
    $reviews[] = DB::table('reviews')->where('unique_gym_id', '=', $gymsearch->unique_gym_id)->get(); 
} 

//dd($reviews); this shows the full review object contents fine 
$data = array_add($data, 'gyms', $gyms, 'reviews', $reviews); 

很可能是

Gym::save($gymsearchs); 
$gyms = Gym::where('unique_gym_id', 'in', array_map(create_function('$o', 'return $o->unique_gym_id;'), $gymsearchs))->get(); 
$data['gyms'] = $gyms; 

,你似乎不使用$評論。但我並不完全瞭解gymsearchs的意圖,以及你想用Review :: review($ gymsearch)方法做什麼。你也應該看看這種情況下急切的加載。有一個 - > with($關係)函數,可以加載所有評論。這樣您可以優化發送到數據庫的查詢數量。

+0

感謝你們,只是要清楚,因爲我不能得到它的工作,我得到這個 試圖獲得非對象的屬性,所以它在一個數組中,模型中的關係sepecfied應該允許這個對象是通過下面加入? @foreach(array_slice($健身房,0,5)爲$健身房) {{$ gym->評論}} @endforeach 如果我不能得到這正確的工作方式與上面 $ data = $ data + ['gyms'=> $ gyms,'reviews'=> $ reviews]; 讓我訪問我以前不能使用的$ reviews,但是如果我做了一個foreach,然後通過$ reviews進行foreach循環,我可以獲得每個外部循環的所有5 $評論內容? – user1529597

+0

它應該是:\ @foreach(array_slice($ gyms,0,5)as $ gym)\ @foreach($ gym-> reviews as $ review){\ $ review-> reviewText}} \ @endforeach \ @endforeach。 where reviewText是您的Review實體的屬性。由於我對laravel模板引擎知之甚少,因此我無法確定如何在其中嵌入\ @foreach語句,但這似乎是一種合適的方式。 (我不得不逃脫[at] -sign,因爲SO不允許我發表評論) – ricktap

+0

乾杯裏克,虐待現在嘗試 – user1529597

相關問題