Laravel Eloquent 惰性渴望加载计数

问题描述 投票:0回答:3

我理想地寻找类似的功能

load('relationship')

但是以相同的方式加载计数

withCount('relationship')

适用于急切加载。

我想它会被称为

loadCount('relationship')

php laravel eloquent
3个回答
79
投票

loadCount()
Laravel 5.8

起可用
$post->loadCount('comments');

$post->comments_count;

文档


37
投票

从 Laravel 5.2 开始,此功能是内置的。

如果 Post 和 Comment 之间有 hasMany 关系,请执行以下操作:

<?php

$posts = App\Post::withCount('comments')->get();

foreach ($posts as $post) {
    echo $post->comments_count;
}

您甚至可以通过在模型中声明它来默认计算急切加载关系:

<?php

// Post model

protected $withCount = ['comments'];

16
投票

这个解决方案对我来说非常有用:

在相关模型上创建一个新的 hasOne 关系,并将原始选择添加到计数查询中。例如,如果您想立即加载给定用户的任务数量,请将其添加到用户模型中:

public function taskCount()
{
    return $this->hasOne('App\Task')
    ->selectRaw('user_id, count(*) as count)
    ->groupBy('user_id');
}

然后像这样加载计数:

$user = User::where('email', $email)->with('taskCount')->first();

并像这样访问计数:

$taskCount = $user->task_count->count;
© www.soinside.com 2019 - 2024. All rights reserved.