2017-06-16 90 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