首页 文章

从链接的雄辩模型laravel中检索集合

提问于
浏览
1

我正在使用laravel 5.3并需要一些Eloquent模型查询的帮助 . 我有三个模型(UserDetails,Categories,Articles) . 我在UserDetails-> Categories(belongsstoMany)和Categories-> Articles(belongsstoMany)之间的关系很有效 . 但是,我将如何获取Userdetails-> Categories-> Articles之间的关系数据 .

每个单独的关系都正常工作,即Userdetails :: find(1) - > categories and Categories :: find(1) - > Articles .

我觉得范围可能是答案,但是当我尝试它时它们似乎不起作用 .

Relationships in models

UserDetails.php

public function Categories(){
    return $this->belongstoMany('App\Categories', 'users_cats',  'user_id','cat_id');
}

Categories.php

public function articles(){
    return $this->belongsToMany('App\Article', 'article_categories', 'categoryID', 'articleID');
}

我已经调查了HasManyThrough函数,但是我再次遇到问题,据我所知它应该是

return $this->hasManyThrough('App\Article', 'App\Categories', TertiaryForeignKey, FinalForeignKey, LocalForeignKey);

我的表格设置为

articles_categories pivot table

articleID - 文章的主键

categoryID - 类别的主键

users_cats pivot table

user_id - userdetails的主键

cat_id - 类别的主键

基于此,hasManyThrough应该如下所示?

public function articles(){
    return $this->hasManyThrough('App\Article', 'App\Categories', 'user_id', 'articleID', 'id');
}

但是这会返回错误列未找到:1054未知列'categories.user_id'在'字段列表'中

2 回答

  • 0

    更新

    所以,如果你想拥有这种关系

    userdetails->分类 - >文章

    然后你需要这样做:

    Userdetail模型:

    public function categories()
    {
        return $this->hasMany(Category::class);
    }
    
    public function articles()
    {
        return $this->hasManyThrough(Article::class, Categories::class);
    }
    

    分类型号:

    public function userdetails()
    {
        return $this->belongsTo(Userdetails::class);
    }
    
    public function categories()
    {
        return $this->hasMany(Category::class);
    }
    

    文章模型:

    public function categories()
    {
        return $this->belongsToMany(Category::class);
    }
    

    然后你可以直接调用 UserDetails::find(1)->articles->get();

  • 0

    您只需要在UserDetails.php模型中声明这样的关系:

    public function categories()
    {
        return $this->hasMany(Categories::class);
    }
    

    在Categories.php模型中:

    public function articles()
    {
        return $this->hasMany(Articles::class);
    }
    

    然后,您可以检索控制器中的类别集合:

    $userdetails = UserDetails::get();
    

    将$ categories变量传递给View并使用foreach循环显示每条记录(文章是模型中的函数)

    @foreach($userdetails->categories as $usercategories )
            <div> {{$usercategories->name}} </div>
    
            @foreach($usercategories->articles as $categoryarticles )
              <div> {{$categoryarticles->name}} </div>
            @endforeach
       @endforeach
    

    使用第二个foreach,您将访问属于该用户的类别的文章 .

相关问题