【问题标题】:Laravel 5.4 one to many relationshipLaravel 5.4 一对多关系
【发布时间】:2017-06-06 09:55:44
【问题描述】:

我的模型中有两个表: - 组(id、name、category_id) - 类别(id、名称)

我需要在我的视图中显示一个包含每个组名及其对应类别的列表。您能否告诉我如何填充 Eloquent 方法以及在视图方面我需要什么?

这是我目前所拥有的,但当然不起作用

-- 组控制器

`       public function index()
{
    $groups = Category::find(1);

    return view('groups.groups',compact('groups'));
}

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

-- 分类控制器

`       public function groups()
{
    return $this->hasMany('App\Group');
}`

-- 类别

`       public function groups()
{
    return $this->hasMany('App\Group');
}`

--查看

@foreach($groups as $group) {{$group->category}} {{$group->category->name}} @endforeach

谢谢!!

【问题讨论】:

  • 你定义了模型中的关系吗? laravel.com/docs/5.4/eloquent-relationships
  • 是的,我刚刚编辑了答案并在两个控制器中添加了关系
  • 您应该在模型中创建关系,而不是在控制器中。
  • 好的,非常感谢我已经将方法转移到模型中:p

标签: laravel-5.4 laravel-eloquent


【解决方案1】:

跟进我的cmets,你想要的是以下内容:

模型+关系:

组模型

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

类别模型

public function groups()
{
    return $this->hasMany(Group::class);
}

然后在您的组控制器中:

public function index()
{
    // consider using paginate() instead of get()
    // using with('category') to eagerload the category (1 extra query) instead of querying for the category in the views foreach loop.
    $groups = Group::with('category')->get();

    return view('groups.groups',compact('groups'));
}

在您看来,您现在可以列出组及其类别:

@foreach ($groups as $group)
    {{-- Assuming group and category have a name and category is always set --}}
    {{ $group->name }} : {{ $group->category->name }}
@endforeach

【讨论】:

    【解决方案2】:

    一个简单的方法是使用 Eloquent 的 Eager Loading: https://laravel.com/docs/4.2/eloquent#querying-relations

    Group::with('category')->get() 
    

    例如:

          # Loop through all groups
          foreach(Group::with('category')->get() as $group){
            #get group name
            print $group->name;
    
            #get all categories related to this group
            $categories =  $group->category;
            foreach ($categories as $category){
                print $category->name;
            }
            print "<br>";
        }
    

    【讨论】:

      【解决方案3】:

      我终于明白了。 在 GroupsController 中添加了这个

      ´
          $groups = Group::with('category')->get();
      
          return view('groups.groups',compact('groups'));
      

      ' 在视图中: @foreach($groups as $group) {{$group-&gt;category-&gt;name}}

      感谢您的帮助

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-01-22
        • 2023-03-09
        • 2018-06-15
        • 1970-01-01
        • 2018-09-27
        • 1970-01-01
        相关资源
        最近更新 更多