2017-02-23 3 views
0

J'ai une application CakePHP 2.x fonctionnant avec une base de données MySQL.Où ou comment puis-je dire à CakePHP (2.x) d'ignorer les vues dans une base de données, afin qu'elles ne fonctionnent qu'avec les tables?

Un autre développeur, pour un autre but dans une autre application (dans Asp.Net) a créé des vues MySQL dans la base de données elle-même.

Ces vues semblent être source de confusion pour mon application CakePHP, parce qu'il les prend sous forme de tableaux et de déconner certaines choses en termes de clés, relations, etc.

est-il un moyen ou un lieu pour moi de dire mon application CakePHP qu'elle ne doit pas s'inquiéter de ces vues et continuer à travailler avec les tables comme elle l'avait toujours fait auparavant?

Répondre

0

Après continue la lecture sur la façon dont CakePHP travaille avec la base de données MySQL et étudie également les syntaxes MySQL, j'ai trouvé la solution ci-dessous et cela a fonctionné. Je poste ici pour les autres qui peuvent en avoir besoin et/ou pour les développeurs plus expérimentés pour poster plutôt ou pas c'est une bonne idée.

Je trouve le fichier où CakePHP saisit les tables de la base de données:

/lib/Cake/Model/Datasource/Database/Mysql.php

je trouve la ligne de code qui fait ce travail:

$result = $this->_execute('SHOW TABLES FROM ' . $this->name($this->config['database']));

Notez la déclaration MySQL, especifically:

'SHOW TABLES FROM ' . $this->name($this->config['database'])

lecture de la documentation SHOW TABLES, j'ai appris ce qu'il fait et sa syntaxe: https://dev.mysql.com/doc/refman/5.7/en/show-tables.html

Alors, je l'ai changé la déclaration:

'SHOW FULL TABLES FROM ' . $this->name($this->config['database']) . ' WHERE Table_Type != "VIEW"'

En gros:

  1. I changé SHOW TABLES à SHOW FULL TABLES de sorte qu'il inclurait la deuxième colonne qui contient BASE TABLE pour les tables régulières et VIEW pour les vues.

  2. Puis, j'ai utilisé cette deuxième information de colonne dans l'instruction WHERE que j'ai ajouté: WHERE Table_Type != "VIEW"' pour filtrer les vues sur les résultats.

La nouvelle ligne finale est:

$result = $this->_execute('SHOW FULL TABLES FROM ' . $this->name($this->config['database']) . ' WHERE Table_Type != "VIEW"');

L'application semble fonctionner parfaitement à nouveau!

0

Pour chaque modèle de table votre application CakePHP utilise, définissez l'table attribut

Si une table dont ont un Model associé, vous devez créer

class Somemodel extends AppModel{ 

    public $table = "somemodels"; 

} 
+0

Alors c'est la meilleure façon de s'y prendre? Déclarez le tableau de chaque modèle un par un? Je ne peux pas simplement ajouter un code de config ou cmd quelque part qui dit ignorer les vues? – vivipoit

+0

pourriez-vous me montrer quel genre de confusion votre application a. parce qu'en fait cette situation est étrange, et j'ai travaillé avec des tables mon application ne fonctionne pas et tout fonctionne très bien –

+1

Donc, il y a toujours eu des tables que cette application n'a pas utilisé. C'était ok. Le problème est que les vues que cette autre personne a faites étaient de relier les choses différemment pour sa fin, ce qui signifiait alors que CakePHP lisait les relations différemment aussi. L'une de ces vues modifie directement une association. J'ai trouvé quelque chose qui semble fonctionner. Je suis sur le point de le poster et j'espère que les commentaires seront que c'est ok. – vivipoit