gpt4 book ai didi

php - laravel 4 Eloquent 急切加载关系计数

转载 作者:行者123 更新时间:2023-12-02 04:54:50 24 4
gpt4 key购买 nike

我有一个具有多个已定义关系的复杂模型。在这个例子中,我想计算 Like 模型并创建一个名为 likes 的属性,以便它可以从 REST 服务返回。

是否可以预先将模型计数加载到动态属性中?

$beat = Post::with(
array(
'user',
'likes' => function($q){
$q->count();
}
))
->where('id', $id)
->first();

最佳答案

假设您有 Post->hasMany->Like 关系并且您已将喜欢关系声明为:

class Post{

public function likes(){
return $this->hasMany('Like');
}
}

创建一个新函数说 likeCountRelation 为:

public function likeCountRelation()
{
$a = $this->likes();

return $a->selectRaw($a->getForeignKey() . ', count(*) as count')->groupBy($a->getForeignKey());
}

现在您可以覆盖 __get() 函数:

public function __get($attribute)
{

if (array_key_exists($attribute, $this->attributes)) {
return $this->attributes[$attribute];
}

switch ($attribute) {

case 'likesCount':
return $this->attributes[$attribute] = $this->likesCountRelation->first() ? $this->likesCountRelation->first()->count : 0;
break;

default:
return parent::__get($attribute);

}
}

或者您可以使用 getattribute 函数:

public function getLikesCountAttribute(){
return $this->likesCountRelation->first() ? $this->likesCountRelation->first()->count : 0;
}

并简单地访问 likesCount 作为 $post->likesCount 你甚至可以像这样加载它:

$posts=Post::with('likesCountRelation')->get();
foreach($post as $post){
$post->likesCount;
}

注意:相同的逻辑可用于变形许多关系。

关于php - laravel 4 Eloquent 急切加载关系计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18177092/

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