Here is full action code. I was changed little for readability. I use CakeDC users plugin. Union works without containing Users.
$this->Translations->Users->addAssociations([
'belongsToMany' => [
'Dusers' => ['className' => 'CakeDC/Users.Users']
]
]);
$friendsTranslations = $this->Translations->find('all')
->where(['Translations.post_state_id' => 2])
->contain(['Users'=>['Dusers'],'Posts' => ['Languages'], 'Languages', 'PostStates'])
->innerJoinWith('Users.Dusers', function ($q) {
return $q->where(['Dusers.id' => $this->Auth->user('id')]);
});
debug($friendsTranslations->sql());
$translations = $this->Translations->find('all')
->where(['Translations.post_state_id' => 3])
->contain(['Users' => ['Dusers'], 'Posts' => ['Languages'], 'Languages', 'PostStates']);
// $translations->union($friendsTranslations);
dd($translations->sql());
Here is friends translations sql code
SELECT translations.id AS `Translations__id`,
translations.post_id AS `Translations__post_id`,
translations.vote_count AS `Translations__vote_count`,
translations.language_id AS `Translations__language_id`,
translations.post_state_id AS `Translations__post_state_id`,
translations.hits AS `Translations__hits`,
translations.progress AS `Translations__progress`,
translations.user_id AS `Translations__user_id`,
translations.created AS `Translations__created`,
translations.modified AS `Translations__modified`,
posts.id AS `Posts__id`,
posts.language_id AS `Posts__language_id`,
posts.title AS `Posts__title`,
posts.text AS `Posts__text`,
posts.post_state_id AS `Posts__post_state_id`,
posts.hits AS `Posts__hits`,
posts.vote_count AS `Posts__vote_count`,
posts.user_id AS `Posts__user_id`,
posts.created AS `Posts__created`,
posts.modified AS `Posts__modified`,
languages.id AS `Languages__id`,
languages.name AS `Languages__name`,
languages.code AS `Languages__code`,
PostStates.id AS `PostStates__id`,
PostStates.name AS `PostStates__name`,
PostStates.icon AS `PostStates__icon`
FROM translations Translations
INNER JOIN users Users
ON users.id = ( translations.user_id )
INNER JOIN users_users UsersUsers
ON users.id = ( UsersUsers.user_id )
INNER JOIN users Dusers
ON ( Dusers.id = :c0
AND Dusers.id = ( UsersUsers.duser_id ) )
INNER JOIN posts Posts
ON posts.id = ( translations.post_id )
LEFT JOIN languages Languages
ON languages.id = ( translations.language_id )
LEFT JOIN post_states PostStates
ON PostStates.id = ( translations.post_state_id )
WHERE translations.post_state_id = :c1
Here is translations sql
SELECT translations.id AS `Translations__id`,
translations.post_id AS `Translations__post_id`,
translations.vote_count AS `Translations__vote_count`,
translations.language_id AS `Translations__language_id`,
translations.post_state_id AS `Translations__post_state_id`,
translations.hits AS `Translations__hits`,
translations.progress AS `Translations__progress`,
translations.user_id AS `Translations__user_id`,
translations.created AS `Translations__created`,
translations.modified AS `Translations__modified`,
users.id AS `Users__id`,
users.username AS `Users__username`,
users.email AS `Users__email`,
users.friends AS `Users__friends`,
users.bio AS `Users__bio`,
users.text AS `Users__text`,
users.photo AS `Users__photo`,
users.password AS `Users__password`,
users.star_count AS `Users__star_count`,
users.first_name AS `Users__first_name`,
users.last_name AS `Users__last_name`,
users.phone AS `Users__phone`,
users.token AS `Users__token`,
users.token_expires AS `Users__token_expires`,
users.api_token AS `Users__api_token`,
users.activation_date AS `Users__activation_date`,
users.tos_date AS `Users__tos_date`,
users.active AS `Users__active`,
users.is_superuser AS `Users__is_superuser`,
users.role AS `Users__role`,
users.created AS `Users__created`,
users.modified AS `Users__modified`,
posts.id AS `Posts__id`,
posts.language_id AS `Posts__language_id`,
posts.title AS `Posts__title`,
posts.text AS `Posts__text`,
posts.post_state_id AS `Posts__post_state_id`,
posts.hits AS `Posts__hits`,
posts.vote_count AS `Posts__vote_count`,
posts.user_id AS `Posts__user_id`,
posts.created AS `Posts__created`,
posts.modified AS `Posts__modified`,
languages.id AS `Languages__id`,
languages.name AS `Languages__name`,
languages.code AS `Languages__code`,
PostStates.id AS `PostStates__id`,
PostStates.name AS `PostStates__name`,
PostStates.icon AS `PostStates__icon`
FROM translations Translations
LEFT JOIN users Users
ON users.id = ( translations.user_id )
INNER JOIN posts Posts
ON posts.id = ( translations.post_id )
LEFT JOIN languages Languages
ON languages.id = ( translations.language_id )
LEFT JOIN post_states PostStates
ON PostStates.id = ( translations.post_state_id )
WHERE translations.post_state_id = :c0