2017-06-16 87 views
1

我想顯示與我的評論相關的圖片。我目前正在收集一個-Property [圖片]在這個收藏實例上不存在。我將如何去檢索與評論相關的圖像。顯示與評論​​相關的圖像

這裏是我的表 產品:編號,名稱,價格 點評:身份證,審查,products_id_fk 圖片:ID,圖像,Reviews_id_fk

這裏是我的模型 產品:

class Product extends Model 
{ 
    public function reviews() 
    { 
     return $this->hasMany('App\Reviews','reviews_id'); 
    } 
} 

點評:

class Reviews extends Model 
{ 
    // 
    public function products(){ 
     return $this->belongsTo('App\Product'); 
    } 
    public function author() 
    { 
     return $this->belongsTo('App\User','user_id'); 
    } 
    public function pictures() 
     { 
      return $this->hasMany('App\Pictures'); 
     } 

} 

圖片型號:

class Picture extends Model 
{ 
    // 

    public function author() 
    { 
     return $this->belongsTo('App\User','user_id'); 
    } 
    public function reviews() 
    { 
     return $this->belongsTo('App\Reviews'); 
    } 

} 

ProductController的:

public function getSingle($slug) 
{ 
    //fetch from the database based on slug. 
    $product = Products::where('slug', '=', $slug)->first(); 





    //return view 
    return view('products.single')->withProduct($product); 

} 

查看刀片:

 @foreach($product->reviews as $reviews) 


       <div class="col-md-9"> 
       <div class="content"> 


        <div class="review-info"> 
        <p>{{$reviews->review}}</p> 

       </div> 
        <div class="images"> 
         @foreach ($reviews->pictures as $picture) 

          <img src="{{asset('images/' . $picture->image)}}"> 




         @endforeach 


        </div> 

回答

0

你錯過了從圖片的關係,審查外鍵的名稱。

圖片模式應該是這樣的:

class Picture extends Model 
{ 
    public function author() 
    { 
     return $this->belongsTo('App\User','user_id'); 
    } 
    public function review() 
    { 
     return $this->belongsTo('App\Review', 'Reviews_id_fk'); 
    } 
} 

的審查模式應該是這樣的:

class Review extends Model 
{ 
    public function product() 
    { 
     return $this->belongsTo('App\Product', 'products_id_fk'); 
    } 
    public function author() 
    { 
     return $this->belongsTo('App\User','user_id'); 
    } 
    public function pictures() 
    { 
     return $this->hasMany('App\Picture', 'Reviews_id_fk', 'id'); 
    } 
} 

產品型號應該是這樣的:

class Product extends Model 
{ 
    public function reviews() 
    { 
     return $this->hasMany('App\Review','products_id_fk'); 
    } 
} 

雄辯的命名約定由默認是在圖片表上尋找名爲review_id的字段,b因爲你用不同的方式命名它,所以你需要像上面那樣在關係方法中指定它。有了這個,你應該能夠使用以下命令:

@foreach($product->reviews as $reviews) 
    ... 
    @foreach($reviews->pictures as $picture) 
     ... 
     <img src="{{asset('images/' . $picture->image)}}"> 
    @endforeach 
@endforeach 

如果更改Reviews_id_fk字段的名稱review_id的圖片模型,你可以省略的關係方法指定的外國和本地鍵。

我也將幾個方法的名稱從複數改爲單數以更好地遵循約定。模型也應該是單一的名稱,因爲它們代表一個單一的實體。我也在上面的變化中反映了這一點。

您也可以忽略圖片和用戶之間的關係,因爲這是通過Review模型建立的。

$picture->review->author 
+0

男人,我聽到你在說什麼,但我仍然得到錯誤。 **這個集合實例中不存在屬性[pictures]。**是否有可能問題是第一個foreach不允許第二個輸入它的模型,因爲已經通過$ product調用了評論? – detinu20

+0

嘗試在您的Review模型中添加'protected $ with = ['pictures'];'看起來好像並不急於正確加載圖片。 – btl

+0

回到相同的問題。此集合實例中不存在屬性[圖片]。 ('slug','=',$ slug) - > – detinu20