首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >拉拉维尔关系

拉拉维尔关系
EN

Stack Overflow用户
提问于 2014-09-11 23:31:10
回答 2查看 2K关注 0票数 0

我正在创建一个基本的论坛,只是为了让我有一些有意义的事情做,同时学习拉拉维尔。所以,就像组织每个论坛一样,在主页上,我希望有一个类别及其子类别的列表,每个子类别中的帖子总数,同时也有一个链接到最新的帖子。

因此,关系是嵌套的hasMany:

代码语言:javascript
运行
复制
Category -> has Subcategories -> has Threads -> has Posts.

在控制器方法中

代码语言:javascript
运行
复制
$cat = Category::with('subcategory')->get();
return View::make('forum.index', compact('cat'));

这适用于基本类别和子类别的列表,但我不知道其余的部分。这肯定不管用

代码语言:javascript
运行
复制
Category::with('subcategory')->with('threads')->with('posts')->get();

因为它们之间的关系是不确定的。看看Laravel,就会发现hasManyThrough关系。这是解决办法吗?

代码语言:javascript
运行
复制
class Category extends Eloquent {

    public function subcategory()       {
        return $this->hasMany('Subcategory');
    }

    public function posts()     { // not sure about this cause it doesnt work
        return $this->hasManyThrough('Post', 'Thread');
    }
}

最重要的是,我如何获得每个子类别的帖子->count()?有可能把它分开吗?链子会变得复杂..。

编辑表列是

类别

代码语言:javascript
运行
复制
   id | title

子范畴

代码语言:javascript
运行
复制
   id | title | category_id

线程

代码语言:javascript
运行
复制
   id | title | subcategory_id | user_id  

帖子

代码语言:javascript
运行
复制
   id | title | body | thread_id | user_id

编辑2只获取最新帖子的代码是什么?这不管用

代码语言:javascript
运行
复制
$data =  Category::with('subcategories.threads')->with(array('posts' => function($query)
{
    $query->take(1);

}))->get();
EN

回答 2

Stack Overflow用户

发布于 2014-09-11 23:50:55

您只设置了一个可以工作的关系,即:

代码语言:javascript
运行
复制
class Category extends Eloquent {

    public function subcategory()       {
        return $this->hasMany('Subcategory');
    }
}

在其他模型中声明其他关系:

代码语言:javascript
运行
复制
class Subcategory extends Eloquent {

    public function threads()       {
        return $this->hasMany('Thread');
    }
}

class Thread extends Eloquent {

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

一旦您声明了关系,那么您可以使用:

代码语言:javascript
运行
复制
$categories = Category::with('subcategory.threads.posts')->get();

由于一个Category有许多subcategories,所以在Category模型中使用subcategories的复数名称而不是subcategory,因此可以使用:

代码语言:javascript
运行
复制
class Category extends Eloquent {

    public function subcategories()       {
        return $this->hasMany('Subcategory');
    }
}

然后还:

代码语言:javascript
运行
复制
$categories = Category::with('subcategories.threads.posts')->get();

所有关系都将作为嵌套对象集合检索。例如:

代码语言:javascript
运行
复制
$categories->subcategories; // Will be a collection of Subcategory models
$categories->subcategories->threads // Will be a collection of Thread models
$categories->subcategories->threads->posts // Will be a collection of Post models

您可以使用以下内容声明SubcategoryPost之间的Post关系:

代码语言:javascript
运行
复制
class Subcategory extends Eloquent {

    public function threads() {
        return $this->hasMany('Thread');
    }

    public function posts() {
        return $this->hasManyThrough('Post', 'Thread');
    }
}

此外,您还可以通过CategoryThread通过Subcategory建立关系。

票数 3
EN

Stack Overflow用户

发布于 2019-02-07 07:15:55

我有QuestionCategory,Questions['category_id']ItemsOfQuestion['question_id'],这个代码为我的代码工作,我希望这对你有用

代码语言:javascript
运行
复制
$categories=ExamCategory::with(['question' => function ($query) use($exam){$query->where('exam_id','=',$exam->id)->with('Items');}])->get();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25798517

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档