gpt4 book ai didi

php - 获取 TYPO3 Extbase mm 关系计数

转载 作者:行者123 更新时间:2023-11-29 05:08:15 25 4
gpt4 key购买 nike

我们在模型之间创建了一个简单的 mm 关系,如下所示:

<?php
namespace VENDOR\COMPANY\Domain\Model;

class Posts extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity
{

//..

/**
* users
*
* @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\VENDOR\COMPANY\Domain\Model\Users>
*/
protected $likedBy = null;

//..

}

MySQL 数据库创建一个新的 mm 表,并在 ..domain_post 表中创建一个计数器列 users。有没有一种比调用所有相关用户并计算它们更“轻松”的方法来获得此计数?

$amountLikes = $post->getLikedBy()->count();

想象一下每个帖子都有大约 30000 个赞的列表。该脚本开始在内存中构建 30000 个对象。向 posts 表询问数字对我来说听起来更现实。但是如何呢?

最佳答案

Extbase 存储库默认使用 countAll()/countByProperty()。您还可以将自己的函数添加到存储库中,以仅返回任何查询的对象计数。

你可以在你的 Controller 中尝试这样的事情:

$amountLikes = $this->usersRepository->countByLikedPosts($anyPost);

这要求您的用户模型对用户喜欢的所有帖子都有类似反向引用属性(如“likedPosts”)。

编辑:用户的 likedPosts 属性也必须是一个 Objectstorage。因此,默认的 countByXy 函数可能不起作用,因为 Objectstorages 需要存储库中的 contains()-约束。因此,您可能必须将自己的功能添加到 usersRespository - 如下所示:

public function countByLikedPost($post) {
$query = $this->createQuery();
return $query->matching($query->contains('likedPosts',$post))->count();
}

关于php - 获取 TYPO3 Extbase mm 关系计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44393562/

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