2017-06-06 4 views
1

我々はそうのようなモデルに間の単純なミリの関係を作成したカウントゲット:TYPO3 Extbaseミリメートル関係が

<?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データベースは、新しいミリメートルのテーブルを作成しても..domain_postテーブル内のカウンタ列usersを作成します。関連するすべてのユーザーに電話をかけてカウントするのではなく、このカウントを行うための「軽い」方法はありますか?

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

それぞれ〜30000件の好きな投稿のリストを想像してみてください。スクリプトはメモリに30000個のオブジェクトを構築し始めます。数字のためにポストテーブルを尋ねることは、私にとってより現実的なものです。しかし、どのように?

答えて

2

ExtbaseリポジトリにはデフォルトでcountAll()/ countByProperty()があります。リポジトリに独自の関数を追加して、クエリのオブジェクト数を返すこともできます。

あなたのコントローラ内でこのような何かを試すことがあります。

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

これはあなたのユーザー・モデルは、ユーザーに好まれているすべての記事に(「likedPosts」のような)後方参照プロパティのようなものを持っている必要が。

編集: ユーザーのfavoritePostsプロパティもObjectStorageでなければなりません。このため、Objectstoragesにはリポジトリにcontains() - 制約が必要なため、デフォルトのcountByXy関数は機能しない可能性があります。ですから、usersRespositoryに独自の機能を追加する必要があり - このような何か:ここにあなたの懸念はパフォーマンスである場合

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

あなたが実行されたステートメントを数える場合は、extbaseはまだ、すべての一致するエンティティのためのextbaseオブジェクトを構築します。しかし、最初にクエリを実行せずにcountを呼び出すだけでは、docs https://docs.typo3.org/typo3cms/ExtbaseFluidBook/6-Persistence/3-implement-individual-database-queries.htmlに記載されているようにはなりません。 。 – j4k3

+2

@ j4k3この重要な提案をありがとうj4k3 - 私は上記の答えを編集しました。 –

1

を、あなたはあなたの関係のモデルを再定義することを検討してください。 TYPO3は、関係するエンティティの量を自動的に維持するエンティティのMM関係の関係フィールドを保持します。次に、実際の列の内容を解決するカスタムクエリを書くことができます。これは、好き嫌いの量になります。それを行う方法についての良い出発点として、ブログ記事をheres。

http://lbrmedia.net/codebase/Eintrag/extbase-bidirektionale-mm-relation/

はまた、あなたの現在のモデルから判断し、ユーザーとの関係がExtbaseはあなたがロードすべてのポストのために、これらすべてのユーザーをインスタンス化することを意味し、怠け者ではないとして、遅延ロードの関係を理解する必要があります。

https://docs.typo3.org/typo3cms/ExtbaseFluidBook/5-Domain/2-implementing-the-domain-model.html

関連する問題