我理想地寻找像这样的功能
load('relationship')
Run Code Online (Sandbox Code Playgroud)
但是以相同的方式加载计数
withCount('relationship')
Run Code Online (Sandbox Code Playgroud)
适用于急切加载.
我想它会被称为 loadCount('relationship')
rzb*_*rzb 24
从Laravel 5.2开始,此功能是内置的.
如果Post和Comment之间有hasMany关系,请执行以下操作:
<?php
$posts = App\Post::withCount('comments')->get();
foreach ($posts as $post) {
echo $post->comments_count;
}
Run Code Online (Sandbox Code Playgroud)
通过在模型中声明这一点,您甚至可以默认计算加载关系计数:
<?php
// Post model
protected $withCount = ['comments'];
Run Code Online (Sandbox Code Playgroud)
小智 13
这个解决方案对我很有用:
在相关模型上创建新的hasOne关系,并将原始选择添加到计数的查询中.例如,如果您希望为给定用户急切加载任务数,请将其添加到用户模型:
public function taskCount()
{
return $this->hasOne('App\Task')
->selectRaw('user_id, count(*) as count)
->groupBy('user_id');
}
Run Code Online (Sandbox Code Playgroud)
然后急切加载计数如下:
$user = User::where('email', $email)->with('taskCount)->first();
Run Code Online (Sandbox Code Playgroud)
并像这样访问计数:
$taskCount = $user->task_count->count;
Run Code Online (Sandbox Code Playgroud)
Mak*_*nov 10
loadCount()自Laravel 5.8起可用
$post->loadCount('comments');
$post->comments_count;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9042 次 |
| 最近记录: |