为什么这个关联模型计数不起作用?

文档见:模型关联《Laravel 8 中文文档》

文档描述是:
有时您可能需要计算给定关系的相关模型的数量,而不实际加载模型。 为此,您可以使用 withCount 方法。 withCount 方法将在生成的模型上放置 {relation}_count 属性:

use App\Models\Post;

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

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

我出现的问题

caseBatchs 是关联方法,一对多。下面这样写不起作用
caseBatchs_count 打印出来的结果是null

$contract = CaseContract::withCount('caseBatchs')->get();
foreach ($contract as $item) {
 dd($item->caseBatchs_count);
}

最后只能换成这样才可以
caseBatchs->count()

$contract = CaseContract::withCount('caseBatchs')->get();
foreach ($contract as $item) {
 dd($item->caseBatchs->count());
}

请问是什么原因哈?

乌鸦嘴新手社区 wyz.xyz 为技术新手提供服务
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
laradocs
最佳答案

在尝试之前,您要确保模型关联关系正常,并存在关联数据。

首先,您要在终端运行以下命令:

php artisan tinker;

namespace App\Models;
$posts = Post::withCount('comments')->get();
// 正常情况下会返回类似下面的内容
=> Illuminate\Database\Eloquent\Collection {#4636
     all: [
       App\Models\Post {#4626
         .
         .
         .
         comments_count: 3,
       },
       App\Models\Post {#4636
         .
         .
         .
         comments_count: 1,
       },
     ],
   }

如果返回值与预期不一致,请检查您的模型关联是否有误。

2年前 评论
shebaoting (楼主) 2年前
laradocs (作者) 2年前
还不出来 2年前
讨论数量: 2
laradocs

在尝试之前,您要确保模型关联关系正常,并存在关联数据。

首先,您要在终端运行以下命令:

php artisan tinker;

namespace App\Models;
$posts = Post::withCount('comments')->get();
// 正常情况下会返回类似下面的内容
=> Illuminate\Database\Eloquent\Collection {#4636
     all: [
       App\Models\Post {#4626
         .
         .
         .
         comments_count: 3,
       },
       App\Models\Post {#4636
         .
         .
         .
         comments_count: 1,
       },
     ],
   }

如果返回值与预期不一致,请检查您的模型关联是否有误。

2年前 评论
shebaoting (楼主) 2年前
laradocs (作者) 2年前
还不出来 2年前

打印dd($item),看具体生成的属性哪种

2年前 评论
shebaoting (楼主) 2年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!