CakePHP 3 Premières Requêtes SQL
Je suis en utilisant CakePHP 3, j'ai besoin d'exécuter un raw SQL de la requête sur plusieurs tables. Dans CakePHP 2, ce qui pourrait être fait à l'aide de la méthode query() sur un modèle ( $this->Messages->query("select..")
).
J'ai besoin de la méthode qui me permet d'exécuter une requête SQL dans CakePHP 3. Voici l'extrait de code que j'utilise:
$aumTable = TableRegistry::get('Messages');
$sql = "SELECT (SELECT COUNT(*) FROM `messages`) AS `Total_Count`,
(SELECT COUNT(*) FROM `messages_output`) AS `Total_Output_Count`,
(SELECT COUNT(*) FROM `messages_output` WHERE `is_success`=1) AS `Total_Successful_Output_Count`,
(SELECT COUNT(*) FROM `messages_output` WHERE `is_success`=0) AS `Total_Error_Output_Count`,
(SELECT COUNT(*) FROM `users`) AS `Total_User_Count`;";
//to run this raw SQL query what method should i use? query() doesn't work..
//$result = $aumTable->query($sql); ??
//$result = $aumTable->sql($sql); ??
Si vous pouvez fournir des liens vers CakePHP 3 documentation du modèle où je peux trouver cette info, ça serait aussi utile. J'ai essayé de chercher sur google, mais ne pouvait trouver des questions liées à CakePHP 2.
book.cakephp.org/3.0/en/orm/... > book.cakephp.org/3.0/en/orm/...
Je vous remercie. La réponse est: nous avons besoin d'utiliser ConnectionManager au lieu de TableRegistry pour exécuter des premières requêtes sql.
Je vous remercie. La réponse est: nous avons besoin d'utiliser ConnectionManager au lieu de TableRegistry pour exécuter des premières requêtes sql.
OriginalL'auteur Ananth | 2014-10-11
Vous devez vous connecter pour publier un commentaire.
Vous devez d'abord ajouter le ConnectionManager:
Alors vous avez besoin pour obtenir votre connexion comme suit:
Plus d'infos: http://book.cakephp.org/3.0/en/orm/database-basics.html#creating-connections-at-runtime
Après cela, vous pouvez exécuter une requête personnalisée comme ceci:
Plus d'infos: http://book.cakephp.org/3.0/en/orm/database-basics.html#executing-queries
Et alors vous êtes prêt pour l'extraction de la ligne(s) comme ceci:
Plus d'infos: http://book.cakephp.org/3.0/en/orm/database-basics.html#executing-fetching-rows
OriginalL'auteur Tijme
La documentation est ici: http://book.cakephp.org/3.0/en/orm/database-basics.html#executing-queries
Mais ce n'est pas écrit il y a la façon de l'exécuter. Parce que ça m'a coûté un certain temps, voici la solution:
1.Vous devez ajouter
2.init le ConnectionManager (comme mentionné ci-dessus)
3.Exécuter SQL avec quelque chose comme ça
Belle astuce pour rendre cette!
OriginalL'auteur Tobias Gaertner
La question est déjà très vieux, mais je trouve encore fréquemment.
Voici une solution pour CAKEPHP 3.6 et (court) pour les nouvelles Versions de PHP.
Il n'est pas nécessaire d'utiliser la ConnectionManager obtenir la fonction et le plus souvent il ne fait pas de sens, comme le nom de la connexion peut ne pas être connu de tous. Chaque table dispose de sa /une connexion que l'on peut obtenir avec getConnection ().
Si vous êtes déjà dans la Table des Messages (
src/Model/Table/MessagesTable.php
), vous pouvez simplement utiliser la ConnexionSi vous n'êtes pas là (ce que votre code suggère avec
TableRegistry::get()
, vous pouvez le faire avec cette table ainsiensuite, vous pouvez exécuter une CRUE requête, comme illustré ci-dessus:
OriginalL'auteur chriss