gpt4 book ai didi

php - Laravel 中关系的计数关系

转载 作者:行者123 更新时间:2023-12-01 08:51:14 27 4
gpt4 key购买 nike

假设我有一个这样的 Conversation 模型:

class Conversation extends Model
{
public function questions (){
return $this->hasMany('App\Question','conversation_id','conversation_id');
}
public function category ()
{
return $this->belongsTo('App\Category', 'cat', 'cat_id');
}

}

还有一个像这样的 Question 模型:
class Question extends Model
{
public function conversation ()
{
return $this->belongsTo('App\Conversation', 'conversation_id', 'conversation_id');
}
}

如您所见,这两者之间存在 hasMany 关系。

另一方面,像下面这样的 CategoryConversation 模型有关系:
class Category extends Node
{
public function conversations (){
return $this->hasMany('App\Conversation','cat','cat_id');
}
}

现在我想将一个名为 question_count 的属性附加到 Category ,该属性计算每个类别对话的所有问题。为此,我添加了以下内容:
    public function getQuestionsCountAttribute ()
{
return $this->conversations->questions->count();
}

但是当获取一个类别时,我收到了这个错误:
ErrorException in Category.php line 59:
Undefined property: Illuminate\Database\Eloquent\Collection::$questions

我做了什么?如何计算具有最小服务器过载的关系的关系?

我正在使用 Laravel 5.3.4。

最佳答案

我认为你需要一个有很多的关系在这里。

你做错了什么:

当您编写 $this->conversations->questions 时,这是行不通的,因为 questions 单个对话 的关系,而不是对话集合(这里,$this->conversations 是一个集合)

解决办法:

使用 hasManyThrough 关系:

如果我的解释不好,您可以找到此关系 on this page 的文档

基础知识是,您需要在 Category 模型上定义一个关系:

class Category extends Node
{
public function conversations ()
{
return $this->hasMany('App\Conversation');
}

public function questions ()
{
return $this->hasManyThrough('App\Question', 'App\Conversation');
}
}

(我会让您查看非标准外键的文档)

然后你应该可以使用: $category->questions->count()

关于php - Laravel 中关系的计数关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41457039/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com