31 class RelationTest extends \TYPO3\TestingFramework\Core\Functional\FunctionalTestCase
55 protected function setUp()
59 $this->importDataSet(
'PACKAGE:typo3/testing-framework/Resources/Core/Functional/Fixtures/pages.xml');
60 $this->importDataSet(ORIGINAL_ROOT .
'typo3/sysext/extbase/Tests/Functional/Persistence/Fixtures/blogs.xml');
61 $this->importDataSet(ORIGINAL_ROOT .
'typo3/sysext/extbase/Tests/Functional/Persistence/Fixtures/posts.xml');
62 $this->importDataSet(ORIGINAL_ROOT .
'typo3/sysext/extbase/Tests/Functional/Persistence/Fixtures/persons.xml');
63 $this->importDataSet(ORIGINAL_ROOT .
'typo3/sysext/extbase/Tests/Functional/Persistence/Fixtures/tags.xml');
64 $this->importDataSet(ORIGINAL_ROOT .
'typo3/sysext/extbase/Tests/Functional/Persistence/Fixtures/tags-mm.xml');
65 $this->importDataSet(ORIGINAL_ROOT .
'typo3/sysext/extbase/Tests/Functional/Persistence/Fixtures/post-tag-mm.xml');
66 $this->importDataSet(ORIGINAL_ROOT .
'typo3/sysext/extbase/Tests/Functional/Persistence/Fixtures/categories.xml');
67 $this->importDataSet(ORIGINAL_ROOT .
'typo3/sysext/extbase/Tests/Functional/Persistence/Fixtures/category-mm.xml');
69 $this->objectManager = GeneralUtility::makeInstance(\
TYPO3\CMS\
Extbase\Object\ObjectManager::class);
70 $this->persistentManager = $this->objectManager->get(\
TYPO3\CMS\
Extbase\Persistence\Generic\PersistenceManager::class);
72 $blogRepository = $this->objectManager->get(BlogRepository::class);
73 $this->blog = $blogRepository->findByUid(1);
86 $queryBuilder = (
new ConnectionPool())->getQueryBuilderForTable(
'tx_blogexample_domain_model_post');
87 $queryBuilder->getRestrictions()->removeAll();
88 $countPostsOriginal = $queryBuilder
90 ->from(
'tx_blogexample_domain_model_post')
92 $queryBuilder->expr()->eq(
94 $queryBuilder->createNamedParameter($this->blog->getUid(), \PDO::PARAM_INT)
99 $newPostTitle =
'sdufhisdhuf';
101 $newPost = $this->objectManager->get(Post::class);
102 $newPost->setBlog($this->blog);
103 $newPost->setTitle($newPostTitle);
104 $newPost->setContent(
'Bla Bla Bla');
106 $this->blog->addPost($newPost);
109 $queryBuilder->resetQueryParts();
110 $countPosts = $queryBuilder
112 ->from(
'tx_blogexample_domain_model_post')
114 $queryBuilder->expr()->eq(
116 $queryBuilder->createNamedParameter($this->blog->getUid(), \PDO::PARAM_INT)
120 $this->assertEquals($countPostsOriginal + 1, $countPosts);
122 $queryBuilder->resetQueryParts();
123 $post = $queryBuilder
124 ->select(
'title',
'sorting')
125 ->from(
'tx_blogexample_domain_model_post')
127 $queryBuilder->expr()->eq(
129 $queryBuilder->createNamedParameter($this->blog->getUid(), \PDO::PARAM_INT)
131 )->orderBy(
'sorting',
'DESC')
134 $this->assertSame($newPostTitle, $post[
'title']);
135 $this->assertEquals($countPostsOriginal + 1, $post[
'sorting']);
145 $queryBuilder = (
new ConnectionPool())->getQueryBuilderForTable(
'tx_blogexample_domain_model_post');
146 $queryBuilder->getRestrictions()
147 ->removeAll()->add(
new DeletedRestriction());
148 $countPostsOriginal = $queryBuilder
150 ->from(
'tx_blogexample_domain_model_post')
154 $queryBuilder->resetQueryParts();
155 $post = $queryBuilder
156 ->select(
'title',
'sorting')
157 ->from(
'tx_blogexample_domain_model_post')
159 $queryBuilder->expr()->eq(
161 $queryBuilder->createNamedParameter($this->blog->getUid(), \PDO::PARAM_INT)
163 )->orderBy(
'sorting',
'DESC')
166 $this->assertEquals(10, $post[
'sorting']);
168 $posts = $this->blog->getPosts();
169 $postsArray = $posts->toArray();
170 $latestPost = array_pop($postsArray);
172 $this->assertEquals(10, $latestPost->getUid());
174 $this->blog->removePost($latestPost);
177 $queryBuilder->resetQueryParts();
178 $countPosts = $queryBuilder
180 ->from(
'tx_blogexample_domain_model_post')
183 $this->assertEquals($countPostsOriginal - 1, $countPosts);
185 $queryBuilder->resetQueryParts();
186 $post = $queryBuilder
187 ->select(
'title',
'sorting')
188 ->from(
'tx_blogexample_domain_model_post')
190 $queryBuilder->expr()->eq(
192 $queryBuilder->createNamedParameter($latestPost->getUid(), \PDO::PARAM_INT)
194 )->orderBy(
'sorting',
'DESC')
197 $this->assertNull($post[
'uid']);
199 $queryBuilder->resetQueryParts();
200 $post = $queryBuilder
201 ->select(
'title',
'sorting')
202 ->from(
'tx_blogexample_domain_model_post')
204 $queryBuilder->expr()->eq(
206 $queryBuilder->createNamedParameter($this->blog->getUid(), \PDO::PARAM_INT)
208 )->orderBy(
'sorting',
'DESC')
211 $this->assertSame(
'Post9', $post[
'title']);
212 $this->assertEquals(9, $post[
'sorting']);
222 $queryBuilder = (
new ConnectionPool())->getQueryBuilderForTable(
'tx_blogexample_domain_model_post');
223 $queryBuilder->getRestrictions()
224 ->removeAll()->add(
new DeletedRestriction());
225 $countPostsOriginal = $queryBuilder
227 ->from(
'tx_blogexample_domain_model_post')
232 $newPost = $this->objectManager->get(Post::class);
234 $posts = clone $this->blog->getPosts();
235 $this->blog->getPosts()->removeAll($posts);
237 $newPostTitle =
'INSERTED POST at position 6';
238 foreach ($posts as $post) {
239 $this->blog->addPost($post);
240 if ($counter === 5) {
241 $newPost->setBlog($this->blog);
242 $newPost->setTitle($newPostTitle);
243 $newPost->setContent(
'Bla Bla Bla');
244 $this->blog->addPost($newPost);
250 $queryBuilder->resetQueryParts();
251 $countPosts = $queryBuilder
253 ->from(
'tx_blogexample_domain_model_post')
256 $this->assertEquals($countPostsOriginal + 1, $countPosts);
259 $queryBuilder->resetQueryParts();
260 $post = $queryBuilder
261 ->select(
'title',
'sorting')
262 ->from(
'tx_blogexample_domain_model_post')
264 $queryBuilder->expr()->eq(
266 $queryBuilder->createNamedParameter($this->blog->getUid(), \PDO::PARAM_INT)
268 )->orderBy(
'sorting',
'DESC')
271 $this->assertSame(
'Post10', $post[
'title']);
272 $this->assertEquals(11, $post[
'sorting']);
275 $queryBuilder->resetQueryParts();
276 $post = $queryBuilder
277 ->select(
'title',
'sorting')
278 ->from(
'tx_blogexample_domain_model_post')
280 $queryBuilder->expr()->eq(
282 $queryBuilder->createNamedParameter($newPost->getUid(), \PDO::PARAM_INT)
284 )->orderBy(
'sorting',
'DESC')
287 $this->assertSame($newPostTitle, $post[
'title']);
288 $this->assertEquals(6, $post[
'sorting']);
298 $queryBuilder = (
new ConnectionPool())->getQueryBuilderForTable(
'tx_blogexample_domain_model_post');
299 $queryBuilder->getRestrictions()
300 ->removeAll()->add(
new DeletedRestriction());
301 $countPostsOriginal = $queryBuilder
303 ->from(
'tx_blogexample_domain_model_post')
307 $posts = clone $this->blog->getPosts();
309 foreach ($posts as $post) {
310 if ($counter === 5) {
311 $this->blog->removePost($post);
317 $queryBuilder->resetQueryParts();
318 $countPosts = $queryBuilder
320 ->from(
'tx_blogexample_domain_model_post')
323 $this->assertEquals($countPostsOriginal - 1, $countPosts);
325 $queryBuilder->resetQueryParts();
326 $post = $queryBuilder
327 ->select(
'title',
'sorting')
328 ->from(
'tx_blogexample_domain_model_post')
330 $queryBuilder->expr()->eq(
332 $queryBuilder->createNamedParameter($this->blog->getUid(), \PDO::PARAM_INT)
334 )->orderBy(
'sorting',
'DESC')
337 $this->assertSame(
'Post10', $post[
'title']);
338 $this->assertEquals(10, $post[
'sorting']);
348 $queryBuilder = (
new ConnectionPool())->getQueryBuilderForTable(
'tx_blogexample_domain_model_post');
349 $queryBuilder->getRestrictions()
350 ->removeAll()->add(
new DeletedRestriction());
351 $countPostsOriginal = $queryBuilder
353 ->from(
'tx_blogexample_domain_model_post')
357 $posts = clone $this->blog->getPosts();
358 $postsArray = $posts->toArray();
359 $latestPost = array_pop($postsArray);
361 $this->blog->getPosts()->removeAll($posts);
363 $postCount = $posts->count();
364 foreach ($posts as $post) {
365 if ($counter !== ($postCount - 1)) {
366 $this->blog->addPost($post);
368 if ($counter === 4) {
369 $latestPost->setTitle(
'MOVED POST ' . $latestPost->getTitle());
370 $this->blog->addPost($latestPost);
376 $queryBuilder->resetQueryParts();
377 $countPosts = $queryBuilder
379 ->from(
'tx_blogexample_domain_model_post')
382 $this->assertEquals($countPostsOriginal, $countPosts);
384 $queryBuilder->getRestrictions()->removeAll();
385 $post = $queryBuilder
386 ->select(
'title',
'sorting')
387 ->from(
'tx_blogexample_domain_model_post')
389 $queryBuilder->expr()->eq(
391 $queryBuilder->createNamedParameter($this->blog->getUid(), \PDO::PARAM_INT)
393 )->orderBy(
'sorting',
'DESC')
396 $this->assertSame(
'Post9', $post[
'title']);
397 $this->assertEquals(10, $post[
'sorting']);
399 $queryBuilder->resetQueryParts();
400 $post = $queryBuilder
401 ->select(
'title',
'uid')
402 ->from(
'tx_blogexample_domain_model_post')
404 $queryBuilder->expr()->andX(
405 $queryBuilder->expr()->eq(
407 $queryBuilder->createNamedParameter($this->blog->getUid(), \PDO::PARAM_INT)
409 $queryBuilder->expr()->eq(
'sorting', $queryBuilder->createNamedParameter(6, \PDO::PARAM_INT))
414 $this->assertSame(
'MOVED POST Post10', $post[
'title']);
415 $this->assertEquals(10, $post[
'uid']);
425 $queryBuilder = (
new ConnectionPool())->getQueryBuilderForTable(
'tx_blogexample_domain_model_tag');
426 $queryBuilder->getRestrictions()
428 $countOriginal = $queryBuilder
430 ->from(
'tx_blogexample_domain_model_tag')
434 $newTagTitle =
'sdufhisdhuf';
437 $newTag = $this->objectManager->get(
'ExtbaseTeam\\BlogExample\\Domain\\Model\\Tag', $newTagTitle);
440 $postRepository = $this->objectManager->get(PostRepository::class);
441 $post = $postRepository->findByUid(1);
442 $post->addTag($newTag);
444 $postRepository->update($post);
445 $this->persistentManager->persistAll();
447 $queryBuilder->resetQueryParts();
448 $count = $queryBuilder
450 ->from(
'tx_blogexample_domain_model_tag')
453 $this->assertEquals($countOriginal + 1, $count);
455 $queryBuilder = (
new ConnectionPool())->getQueryBuilderForTable(
'tx_blogexample_post_tag_mm');
456 $queryBuilder->getRestrictions()
459 ->select(
'uid_foreign')
460 ->from(
'tx_blogexample_post_tag_mm')
462 $queryBuilder->expr()->eq(
464 $queryBuilder->createNamedParameter($post->getUid(), \PDO::PARAM_INT)
466 )->orderBy(
'sorting',
'DESC')
469 $this->assertEquals($newTag->getUid(), $tag[
'uid_foreign']);
479 $queryBuilder = (
new ConnectionPool())->getQueryBuilderForTable(
'tx_blogexample_domain_model_tag');
480 $queryBuilder->getRestrictions()
481 ->removeAll()->add(
new DeletedRestriction());
482 $countOriginal = $queryBuilder
484 ->from(
'tx_blogexample_domain_model_tag')
489 $postRepository = $this->objectManager->get(PostRepository::class);
490 $post = $postRepository->findByUid(1);
491 $tags = $post->getTags();
492 $tagsArray = $tags->toArray();
493 $latestTag = array_pop($tagsArray);
495 $this->assertEquals(10, $latestTag->getUid());
497 $post->removeTag($latestTag);
499 $postRepository->update($post);
500 $this->persistentManager->persistAll();
502 $queryBuilder->resetQueryParts();
503 $countTags = $queryBuilder
505 ->from(
'tx_blogexample_domain_model_tag')
508 $this->assertEquals($countOriginal, $countTags);
510 $queryBuilder = (
new ConnectionPool())->getQueryBuilderForTable(
'tx_blogexample_post_tag_mm');
511 $queryBuilder->getRestrictions()
514 ->select(
'uid_foreign')
515 ->from(
'tx_blogexample_post_tag_mm')
517 $queryBuilder->expr()->eq(
519 $queryBuilder->createNamedParameter($post->getUid(), \PDO::PARAM_INT)
521 )->orderBy(
'sorting',
'DESC')
524 $this->assertEquals(9, $tag[
'uid_foreign']);
526 $queryBuilder->resetQueryParts();
528 ->select(
'uid_foreign')
529 ->from(
'tx_blogexample_post_tag_mm')
531 $queryBuilder->expr()->andX(
532 $queryBuilder->expr()->eq(
534 $queryBuilder->createNamedParameter($post->getUid(), \PDO::PARAM_INT)
536 $queryBuilder->expr()->eq(
538 $queryBuilder->createNamedParameter($latestTag->getUid(), \PDO::PARAM_INT)
541 )->orderBy(
'sorting',
'DESC')
544 $this->assertNull($tag[
'uid_foreign']);
554 $queryBuilder = (
new ConnectionPool())->getQueryBuilderForTable(
'tx_blogexample_post_tag_mm');
555 $queryBuilder->getRestrictions()
557 $countTagsOriginal = $queryBuilder
559 ->from(
'tx_blogexample_post_tag_mm')
561 $queryBuilder->expr()->eq(
'uid_local', $queryBuilder->createNamedParameter(1, \PDO::PARAM_INT))
567 $postRepository = $this->objectManager->get(PostRepository::class);
568 $post = $postRepository->findByUid(1);
569 $tags = clone $post->getTags();
570 $post->setTags(
new ObjectStorage());
573 $newTag = $this->objectManager->get(Tag::class,
'INSERTED TAG at position 6 : ' . strftime(
''));
576 foreach ($tags as $tag) {
578 if ($counter === 5) {
579 $post->addTag($newTag);
584 $postRepository->update($post);
585 $this->persistentManager->persistAll();
587 $queryBuilder->resetQueryParts();
588 $countTags = $queryBuilder
590 ->from(
'tx_blogexample_post_tag_mm')
592 $queryBuilder->expr()->eq(
'uid_local', $queryBuilder->createNamedParameter(1, \PDO::PARAM_INT))
596 $this->assertEquals($countTagsOriginal + 1, $countTags);
598 $queryBuilder->resetQueryParts();
600 ->select(
'uid_foreign')
601 ->from(
'tx_blogexample_post_tag_mm')
603 $queryBuilder->expr()->eq(
605 $queryBuilder->createNamedParameter($post->getUid(), \PDO::PARAM_INT)
607 )->orderBy(
'sorting',
'DESC')
610 $this->assertEquals(10, $tag[
'uid_foreign']);
612 $queryBuilder->resetQueryParts();
614 ->select(
'uid_foreign')
615 ->from(
'tx_blogexample_post_tag_mm')
617 $queryBuilder->expr()->andX(
618 $queryBuilder->expr()->eq(
620 $queryBuilder->createNamedParameter($post->getUid(), \PDO::PARAM_INT)
622 $queryBuilder->expr()->eq(
'sorting', $queryBuilder->createNamedParameter(6, \PDO::PARAM_INT))
624 )->orderBy(
'sorting',
'DESC')
627 $this->assertEquals($newTag->getUid(), $tag[
'uid_foreign']);
637 $queryBuilder = (
new ConnectionPool())->getQueryBuilderForTable(
'tx_blogexample_post_tag_mm');
638 $queryBuilder->getRestrictions()
640 $countTags = $queryBuilder
642 ->from(
'tx_blogexample_post_tag_mm')
644 $queryBuilder->expr()->eq(
'uid_local', $queryBuilder->createNamedParameter(1, \PDO::PARAM_INT))
648 $this->assertEquals(10, $countTags);
651 $postRepository = $this->objectManager->get(PostRepository::class);
652 $post = $postRepository->findByUid(1);
653 $tags = clone $post->getTags();
655 foreach ($tags as $tag) {
656 if ($counter === 5) {
657 $post->removeTag($tag);
662 $postRepository->update($post);
663 $this->persistentManager->persistAll();
665 $queryBuilder->resetQueryParts();
666 $countTags = $queryBuilder
668 ->from(
'tx_blogexample_post_tag_mm')
670 $queryBuilder->expr()->eq(
'uid_local', $queryBuilder->createNamedParameter(1, \PDO::PARAM_INT))
674 $this->assertEquals(9, $countTags);
676 $queryBuilder->resetQueryParts();
678 ->select(
'uid_foreign',
'sorting')
679 ->from(
'tx_blogexample_post_tag_mm')
681 $queryBuilder->expr()->eq(
683 $queryBuilder->createNamedParameter($post->getUid(), \PDO::PARAM_INT)
685 )->orderBy(
'sorting',
'DESC')
688 $this->assertEquals(10, $tag[
'uid_foreign']);
689 $this->assertEquals(10, $tag[
'sorting']);
691 $queryBuilder->resetQueryParts();
693 ->select(
'uid_foreign')
694 ->from(
'tx_blogexample_post_tag_mm')
696 $queryBuilder->expr()->andX(
697 $queryBuilder->expr()->eq(
699 $queryBuilder->createNamedParameter($post->getUid(), \PDO::PARAM_INT)
701 $queryBuilder->expr()->eq(
'sorting', $queryBuilder->createNamedParameter(5, \PDO::PARAM_INT))
706 $this->assertNull($tag[
'uid_foreign']);
716 $queryBuilder = (
new ConnectionPool())->getQueryBuilderForTable(
'tx_blogexample_post_tag_mm');
717 $queryBuilder->getRestrictions()
719 $countTags = $queryBuilder
721 ->from(
'tx_blogexample_post_tag_mm')
723 $queryBuilder->expr()->eq(
'uid_local', $queryBuilder->createNamedParameter(1, \PDO::PARAM_INT))
727 $this->assertEquals(10, $countTags);
730 $postRepository = $this->objectManager->get(PostRepository::class);
731 $post = $postRepository->findByUid(1);
732 $tags = clone $post->getTags();
733 $tagsArray = $tags->toArray();
734 $latestTag = array_pop($tagsArray);
735 $post->removeTag($latestTag);
736 $post->setTags(
new ObjectStorage());
739 $tagCount = $tags->count();
740 foreach ($tags as $tag) {
741 if ($counter !== $tagCount) {
744 if ($counter === 5) {
745 $post->addTag($latestTag);
749 $post->addTag($latestTag);
751 $postRepository->update($post);
752 $this->persistentManager->persistAll();
754 $queryBuilder->resetQueryParts();
755 $countTags = $queryBuilder
757 ->from(
'tx_blogexample_post_tag_mm')
759 $queryBuilder->expr()->eq(
'uid_local', $queryBuilder->createNamedParameter(1, \PDO::PARAM_INT))
763 $this->assertEquals(10, $countTags);
765 $queryBuilder->resetQueryParts();
767 ->select(
'uid_foreign',
'sorting')
768 ->from(
'tx_blogexample_post_tag_mm')
770 $queryBuilder->expr()->eq(
772 $queryBuilder->createNamedParameter($post->getUid(), \PDO::PARAM_INT)
774 )->orderBy(
'sorting',
'DESC')
777 $this->assertEquals(9, $tag[
'uid_foreign']);
778 $this->assertEquals(10, $tag[
'sorting']);
781 $queryBuilder->resetQueryParts();
783 ->select(
'uid_foreign')
784 ->from(
'tx_blogexample_post_tag_mm')
786 $queryBuilder->expr()->andX(
787 $queryBuilder->expr()->eq(
789 $queryBuilder->createNamedParameter($post->getUid(), \PDO::PARAM_INT)
791 $queryBuilder->expr()->eq(
793 $queryBuilder->createNamedParameter($sorting, \PDO::PARAM_STR)
799 $this->assertEquals(10, $tag[
'uid_foreign']);
809 $queryBuilder = (
new ConnectionPool())->getQueryBuilderForTable(
'tx_blogexample_domain_model_post');
810 $queryBuilder->getRestrictions()
812 $rawPost = $queryBuilder
814 ->from(
'tx_blogexample_domain_model_post')
816 $queryBuilder->expr()->eq(
'uid', $queryBuilder->createNamedParameter(1, \PDO::PARAM_INT))
822 $postRepository = $this->objectManager->get(PostRepository::class);
823 $post = $postRepository->findByUid(1);
824 $post->setTitle(
'newTitle');
826 $postRepository->update($post);
827 $this->persistentManager->persistAll();
829 $queryBuilder->resetQueryParts();
830 $rawPost2 = $queryBuilder
832 ->from(
'tx_blogexample_domain_model_post')
834 $queryBuilder->expr()->eq(
'uid', $queryBuilder->createNamedParameter(1, \PDO::PARAM_INT))
838 $this->assertTrue($rawPost2[
'tstamp'] > $rawPost[
'tstamp']);
849 $postRepository = $this->objectManager->get(PostRepository::class);
850 $posts = $postRepository->findByTagAndBlog(
'Tag2', $this->blog);
851 $this->assertCount(1, $posts);
859 $queryBuilder = (
new ConnectionPool())->getQueryBuilderForTable(
'sys_category_record_mm');
860 $queryBuilder->getRestrictions()
862 $countCategories = $queryBuilder
864 ->from(
'sys_category_record_mm')
866 $queryBuilder->expr()->andX(
867 $queryBuilder->expr()->eq(
'uid_foreign', $queryBuilder->createNamedParameter(1, \PDO::PARAM_INT)),
868 $queryBuilder->expr()->eq(
870 $queryBuilder->createNamedParameter(
'tx_blogexample_domain_model_post', \PDO::PARAM_STR)
872 $queryBuilder->expr()->eq(
874 $queryBuilder->createNamedParameter(
'categories', \PDO::PARAM_STR)
880 $this->assertEquals(4, $countCategories);
883 $postRepository = $this->objectManager->get(PostRepository::class);
884 $post = $postRepository->findByUid(1);
885 $this->assertSame(3, count($post->getCategories()));
896 $postRepository = $this->objectManager->get(PostRepository::class);
897 $posts = $postRepository->findByCategory(1);
898 $this->assertSame(2, count($posts));
900 $posts = $postRepository->findByCategory(4);
901 $this->assertSame(0, count($posts));
909 $queryBuilder = (
new ConnectionPool())->getQueryBuilderForTable(
'sys_category_record_mm');
910 $queryBuilder->getRestrictions()
912 $countCategories = $queryBuilder
914 ->from(
'sys_category_record_mm')
916 $queryBuilder->expr()->andX(
917 $queryBuilder->expr()->eq(
'uid_foreign', $queryBuilder->createNamedParameter(1, \PDO::PARAM_INT)),
918 $queryBuilder->expr()->eq(
920 $queryBuilder->createNamedParameter(
'tx_blogexample_domain_model_post', \PDO::PARAM_STR)
922 $queryBuilder->expr()->eq(
924 $queryBuilder->createNamedParameter(
'categories', \PDO::PARAM_STR)
930 $this->assertEquals(4, $countCategories);
933 $postRepository = $this->objectManager->get(PostRepository::class);
934 $post = $postRepository->findByUid(1);
937 $newCategory = $this->objectManager->get(\
TYPO3\CMS\
Extbase\Domain\Model\Category::class);
938 $newCategory->setTitle(
'New Category');
940 $post->addCategory($newCategory);
942 $postRepository->update($post);
943 $this->persistentManager->persistAll();
945 $queryBuilder->resetQueryParts();
946 $countCategories = $queryBuilder
948 ->from(
'sys_category_record_mm')
950 $queryBuilder->expr()->andX(
951 $queryBuilder->expr()->eq(
'uid_foreign', $queryBuilder->createNamedParameter(1, \PDO::PARAM_INT)),
952 $queryBuilder->expr()->eq(
954 $queryBuilder->createNamedParameter(
'tx_blogexample_domain_model_post', \PDO::PARAM_STR)
956 $queryBuilder->expr()->eq(
958 $queryBuilder->createNamedParameter(
'categories', \PDO::PARAM_STR)
964 $this->assertEquals(5, $countCategories);
975 $postRepository = $this->objectManager->get(PostRepository::class);
977 $post = $postRepository->findByUid(1);
979 foreach ($post->getCategories() as $category) {
980 $post->removeCategory($category);
981 $post->addCategory($category);
984 $postRepository->update($post);
985 $this->persistentManager->persistAll();
988 $queryBuilder = (
new ConnectionPool())->getQueryBuilderForTable(
'sys_category_record_mm');
989 $queryBuilder->getRestrictions()
991 $newBlogCategoryCount = $queryBuilder
993 ->from(
'sys_category_record_mm')
995 $queryBuilder->expr()->andX(
996 $queryBuilder->expr()->eq(
998 $queryBuilder->createNamedParameter($this->blog->getUid(), \PDO::PARAM_INT)
1000 $queryBuilder->expr()->eq(
1002 $queryBuilder->createNamedParameter(
'tx_blogexample_domain_model_post', \PDO::PARAM_STR)
1004 $queryBuilder->expr()->eq(
1006 $queryBuilder->createNamedParameter(
'categories', \PDO::PARAM_STR)
1014 $newBlogCategoryCount--;
1015 $this->assertEquals($this->blog->getCategories()->count(), $newBlogCategoryCount);
1024 'order default' => [
1027 'order default, offset 0' => [
1032 'order default, limit 100' => [
1037 'order default, offset 0, limit 100' => [
1048 'order false, offset 0' => [
1054 'order false, limit 100' => [
1056 'order' =>
false,
'limit' => 100
1059 'order false, offset 0, limit 100' => [
1066 'order uid, offset 0' => [
1072 'order uid, limit 100' => [
1078 'order uid, offset 0, limit 100' => [
1094 if (isset($queryRequest[
'order']) && !$queryRequest[
'order']) {
1095 $query->setOrderings([]);
1096 } elseif (!empty($queryRequest[
'order'])) {
1097 $query->setOrderings($queryRequest[
'order']);
1099 if (isset($queryRequest[
'offset'])) {
1100 $query->setOffset($queryRequest[
'offset']);
1102 if (isset($queryRequest[
'limit'])) {
1103 $query->setLimit($queryRequest[
'limit']);
1119 $posts = $query->execute();
1120 $postCount = $posts->count();
1140 $postRecords = $query->execute(
true);
1152 $postRepository = $this->objectManager->get(PostRepository::class);
1153 $query = $postRepository->createQuery();
1156 $query->equals(
'author.uid', $publisherId),
1157 $query->equals(
'reviewer.uid', $publisherId)
1174 new \DateTime(
'2017-08-01')
1177 $blogs = $query->execute();
1178 $blogCount = $blogs->count();
1197 new \DateTime(
'2017-08-01')
1200 $blogRecords = $query->execute(
true);
1212 $blogRepository = $this->objectManager->get(BlogRepository::class);
1213 $query = $blogRepository->createQuery();
1215 $query->greaterThanOrEqual(
'posts.date', $date)
1232 $persons = $query->execute();
1233 $personCount = $persons->count();
1253 $personRecords = $query->execute(
true);
1265 $personRepository = $this->objectManager->get(PersonRepository::class);
1266 $query = $personRepository->createQuery();
1269 $query->equals(
'tags.name', $tagName),
1270 $query->equals(
'tagsSpecial.name', $tagName)
1288 $posts = $query->execute();
1289 $postCount = $posts->count();
1309 $postRecords = $query->execute(
true);
1321 $postRepository = $this->objectManager->get(PostRepository::class);
1322 $query = $postRepository->createQuery();
1325 $query->equals(
'author.tags.name', $tagName),
1326 $query->equals(
'author.tagsSpecial.name', $tagName)
1338 $blogRepository = $this->objectManager->get(BlogRepository::class);
1339 $blogRepository->update($this->blog);
1340 $this->persistentManager->persistAll();
1350 function (AbstractEntity $entity) {
1351 return $entity->getUid();
1363 return array_column($records,
'uid');
1374 return count(array_unique($ids));
1385 $counts = array_count_values($ids);
1386 $this->assertEquals(count($counts), array_sum($counts));