Laravel的Eager Loading正在从数据库中提取所有数据

时间:2016-03-03 03:20:11

标签: model laravel-5 relationship eager-loading

我有一个属于Post模型的Category模型。我还有一个列出所有Post的索引页面,每个我需要打印它所属的Category的名称。

class Post extends Model
{
    public function category()
    {
        return $this->belongsTo(Category::class);
    }
}

class Category extends Model
{
    public function posts()
    {
        return $this->hasMany(Post::class);
    }
}

我的PostController::index

public function index()
{
    return \View::make('admin/post/index')->with([
        'posts' => \DB::table('posts')->orderBy('id', 'DESC')->get(),
        'category' => Post::with('category')->get()
    ]);
}

像这样,如果我回显$category,它会显示Post中每行内的所有已注册类别。我不知道在视图中我可以做些什么来显示每个Post的类别的正确名称。

我在我的视图中这样做了,但是像这样,它只显示每个Post的表的 x 寄存器:

@foreach ($posts as $post)
    <tr>
        <td>
            <a href="/admin/post/view/{{ $post->id }}">
                {{ $post->title }}
            </a>
        </td>
        <td>
            {{ str_limit($post->content, 120) }}
        </td>
        <td>
            {{ $category[1]->category->category }}
        </td>
        <td>
            {{ date('m/d/Y', strtotime($post->created_at)) }}
        </td>
        <td>
            <a href="/admin/post/edit/{{ $post->id }}" class="btn btn-primary">
                Edit
            </a>
            <a href="/admin/post/delete/{{ $post->id }}" class="btn btn-danger">
                Delete
            </a>
        </td>
    </tr>
@endforeach

如何使用预先加载Laravel 5.2正确打印与Category相关的Post名称?

1 个答案:

答案 0 :(得分:1)

我认为以下步骤可以帮助您 在模型中,你与下面的catefory建立了关系:

class Post extends Model
{
 protected $fillable = [
    'name',
    'category_id'
 ];

  //Relation with category Model category table
 public function relCategory(){
    return $this->belongsTo('App\Category', 'category_id', 'id');
 }
}

之后,您可以从Post模型中获取控制器中的所有数据,如下所示:

public function index()
{
  return \View::make('admin/post/index')->with([
    'data' => App\Post::orderBy('id', 'DESC')->get()
  ]);
}

现在在视图页面中,您可以调用模型关系和视图类别,如下所示:

@foreach($data as $values)
  <td>
     {{ $values->relCategory->category }}
  </td>
@endforeach