php - 获取 TYPO3 Extbase mm 关系计数

标签 php mysql typo3 extbase

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

相关文章:

mysql - 什么是 TYPO3 引用索引?为什么它会包含过时的值?

php - MySQL INSERT ....ON DUPLICATE UPDATE - 添加一个到自动增量

php - 如何根据用户提交的数据库条目创建新网页?

namespaces - TYPO3:在具有供应商命名空间的扩展中编写一个 ViewHelper

mysql - MySQL Workbench-如何在不同名称的同一服务器上克隆数据库?

php - 使用 php 发送带有多个复选框的电子邮件

session - Typo3 Extbase 从 Session 中设置和获取值

php - Doctrine - 如何在 postSave() 事件中获取 SQL INSERT 查询?

php - 为特定的重写查询添加尾部斜杠

php - 通过 PHP 唯一且持续地识别移动设备