如何使Laravel多对一(hasMany)关系有效

时间:2018-09-23 15:52:05

标签: php mysql laravel eloquent

我关联了2个模型-类别和新闻,每个新模型可以为其分配1个类别。问题是我无法访问分配给新类别的类别,我的问题是如何使其工作?以及为什么我的方法行不通。

类别模型-

public function news(){
    return $this->hasMany('App\News');
}

新闻模型-

public function category(){
    return $this->belongsTo('App\Categroy');
}

CategoryController- $categories = DB::table('categroys')->get(); dd($categories->news);

消息-

"Property [news] does not exist on this collection instance."

3 个答案:

答案 0 :(得分:0)

  1. 此行将返回Collection的实例。它本身不是模型。这是类别表中的所有项目。 foreach($categories as $category) { $news = $category->news(); }

        $categories = DB::table('categroys')->first();
    
  2. 但是在这种情况下,您将获得第一个项目,它是一个模型

    {{1}}

因此,您应该使用 foreach 或仅获取集合的第一项。

答案 1 :(得分:0)

  

这是Eloquent Relationships。这种关系仅适用于模型。

$categories = Categroy::all();

foreach($categories as $category) {
    // $category->news
}

答案 2 :(得分:0)

您可以eager loading news方法如下:

$categories = Category::with(['news'])->get();
dd($caregories);