Laravel 4.2与图像表的多态关系

时间:2015-12-01 16:13:55

标签: php laravel laravel-4 orm eloquent

我是laravel的新手并试图正确理解如何在我看来展示我的关系图。

例如,我有一个分类,发布,用户和图像的表格,我需要一些帮助。

对于我的数据库,可以使用图像表,就像laravel docs上的教程多态关系一样。(与doc一样)

在我的模型图像中,我有多态关系,一切正常

class Image extends \Eloquent {

    protected $guarded = ['id' , 'created_at'];

    public function imageable(){

        return $this->morphTo();;
    }
}

我需要将图片关联到我的不同类别

  class Category extends \Eloquent {

      protected $guarded = ['id' , 'created_at'];

      public function posts(){
          return $this->hasMany('Post');
      }

      public function images(){

          return $this->morphMany('Image','imageable');
      }

      public function parent(){

          return $this->belongsTo('Category','parent_id');
      }

      public function children(){

          return $this->hasMany('Category','parent_id');
      }

      public function getImportantPost(){

          return $this->hasOne('Post')->latest();
      }

      public function latestPost(){
          return $this->hasOne('Post')->latest();
      }
}

之后在我的主页的家庭控制器中,我有一个特定帖子的请求,以显示特定类别

//show headliner post specific category
$headliner = Category::with(['posts' => function($query){
    $query->orderBy('published_at', 'DESC')->take(1)->get();
}])->where('id' , '=' , '5')->get();

在我的家庭索引视图中,我有一个像这样的foreach $ headliner

  <div class="widget-area-4">
        <div class="widget kopa-article-list-widget">
            <ul class="clearfix">

            @foreach($headliner as $headline)
                <li>
                    <article class="entry-item clearfix">
                        <div class="entry-thumb">
                            <img src="{{$headline}}" alt="" />
                            <span class="category-title">{{$headline->name}}</span>
                        </div>
                        <!-- entry-thumb -->

                        <div class="entry-content">
                            <header>
                                <h5 class="entry-title"><a href="#">{{$headline->latestPost->name}}</a></h5>
                                <span class="entry-date"><i class="fa fa-calendar"></i> {{$headline->latestPost->published_at}}</span>
                                <span class="entry-categories">Auteur: <a href="#"></a></span>
                                <span class="entry-comments"><a href="#">{{$headline->latestPost->counts_comments}}</a><span></span></span>
                            </header>
                            <p>{{str_limit($headline->latestPost->content, 600 ,' ...' )}}</p>
                            <a class="more-link" href="#">Voir plus</a>
                        </div>
                        <!-- entry-content -->
                    </article>
                    <!-- entry-item -->
                </li>
                            @endforeach
            </ul>
        </div>
        <!-- kopa-article-list-widget -->
    </div>

但是我不知道如何在我的foreach中显示我的图像因为我的帖子与类别关联所以它没关系但是当我尝试

{{$headline->images->path}}

(路径是我的数据库中的条目)我有错误。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

由于您已使用 morphMany()来定义类别的图片关系,因此加载此关系会为您提供图像对象。因此,在您的视图中,$ headline-&gt;图像引用此集合,而不是单个图像。集合没有路径属性,因此错误。

您需要在视图中迭代图像集合,然后分别渲染每个图像,例如:

@foreach($headline->images as $image)
  <img src="{{ $image->path }}" />
@endforeach