Dans mon projet Yii2 j'ai les tables post
et post_views
, et un modèle Post
.Tri par données jointes Yii2
Il y a 2 champs post_views
:
post_id
views_counter
J'utilise PostSearch
et PostsQuery
(ActiveQuery) pour mes requêtes.
Ma tâche est: Je dois obtenir tous mes messages avec le champ personnalisé views
où j'obtiens views_counter
de post_views
.
Je n'utilise pas hasMany
dans le modèle parce qu'il n'y a pas de modèle pour la table post_views
dans le projet et je préférerais ne pas le créer si possible. Aussi, j'ai besoin de trier mes messages par views
domaine. Je suis bloqué sur ceci:
public function topPosts(){
$junction_table = '{{%post_views}}';
return $this->innerJoin($junction_table, Post::tableName().'.id='.$junction_table.'.post_id');
}
Le problème principal est que je ne sais pas comment joindre et renvoyer des données correctement. J'ai besoin de cette requête:
SELECT p.*, pv.views_count FROM posts p INNER JOIN post_views pv ON p.id = pv.post_id ORDER BY pv.views_count DESC;
Juste pour la curiosité ... puis-je demander pourquoi la colonne 'views_counter' ne fait pas partie de la table' post'? Je ne vois aucune raison de ne pas être. – Clyff
Je pense qu'il pourrait y avoir plus de colonnes à l'avenir, donc j'ai décidé de les diviser –