我们在模型之间创建了一个简单的 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/