php之Laravel 中关系的计数关系
qq78292959
阅读:23
2024-08-05 10:48:10
评论:0
假设我有一个这样的 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
关系。
另一方面,像下面这样的
Category
与
Conversation
模型有关系:
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()
声明
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。