A.B*_*per 4 php laravel eloquent laravel-5 laravel-5.3
假设我有一个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');
}
}
Run Code Online (Sandbox Code Playgroud)
和这样的Question模型:
class Question extends Model
{
public function conversation ()
{
return $this->belongsTo('App\Conversation', 'conversation_id', 'conversation_id');
}
}
Run Code Online (Sandbox Code Playgroud)
如您所见,这hasMany两者之间存在关系。
另一方面,Category下面有一个与Conversation模型有关系的类似:
class Category extends Node
{
public function conversations (){
return $this->hasMany('App\Conversation','cat','cat_id');
}
}
Run Code Online (Sandbox Code Playgroud)
现在我想附加一个名为question_countto的属性,Category该属性计算每个类别的所有对话问题。为此,我添加了以下内容:
public function getQuestionsCountAttribute ()
{
return $this->conversations->questions->count();
}
Run Code Online (Sandbox Code Playgroud)
但是当获取一个类别时,我收到了这个错误:
ErrorException in Category.php line 59:
Undefined property: Illuminate\Database\Eloquent\Collection::$questions
Run Code Online (Sandbox Code Playgroud)
我做了什么?如何计算具有最小服务器过载的关系的关系?
我正在使用 Laravel 5.3.4。
我认为你需要一个有很多的关系在这里。
你做错了什么:
当您编写时$this->conversations->questions,这是行不通的,因为它们questions是单个对话的关系,而不是对话集合的关系(这里$this->conversations是一个集合)
解决方案:
使用 hasManyThrough 关系:
如果我的解释不好,您可以在此页面上找到此关系的文档
基础知识是,您需要在Category模型上定义一个关系:
class Category extends Node
{
public function conversations ()
{
return $this->hasMany('App\Conversation');
}
public function questions ()
{
return $this->hasManyThrough('App\Question', 'App\Conversation');
}
}
Run Code Online (Sandbox Code Playgroud)
(我会让您查看非标准外键的文档)
然后,您应该能够使用: $category->questions->count()
| 归档时间: |
|
| 查看次数: |
5610 次 |
| 最近记录: |