显示与评论​​相关的图像

时间:2017-06-16 21:28:03

标签: laravel laravel-5 laravel-5.4

我正在尝试展示与我的评论相关的图片。我目前正在获得这个集合实例上不存在的-Property [图片]。我将如何检索与评论相关的图像。

这是我的表格 产品:ID,名称,价格 评论:id,review,products_id_fk 图片:id,image,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>

1 个答案:

答案 0 :(得分: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');
    }
}

Review模型应如下所示:

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');
    }
}

默认情况下,Eloquent的命名约定是在图片表上查找名为review_id的字段,但由于您的命名方式不同,您需要在关系方法中指定它,就像我上面所做的那样。有了这个,你应该能够使用以下内容:

@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