Pourquoi Doctrine ORM ne va pas créer la requête SQL pour mon 1-to-many modèle?
-
29-09-2019 - |
Question
Je sais que cela doit avoir une réponse facile, mais je ne peux pas le comprendre. Après les larmes, j'espère que quelqu'un ici peut aider.
Voici mon modèle YML:
Identity:
columns:
id:
type: integer(10)
primary: true
autoincrement: true
username:
type: string(255)
Profile:
columns:
id:
type: integer(10)
primary: true
autoincrement: true
identity_id:
type: integer(10)
profiletype_id:
type: integer(10)
name:
type: string(255)
relations:
Identity:
local: identity_id
foreign: id
class: Identity
foreignAlias: Profiles
Profiletype:
local: profiletype_id
foreign: id
class: Profiletype
foreignAlias: Profiles
Profiletype:
columns:
id:
type: integer(10)
primary: true
autoincrement: true
type:
type: string(255)
Comme vous pouvez le voir, 3 tables liées sont générés:
Identité
- peut avoir plusieurs profils
Profil
- a une identité
- a un Profiletype
Profiletype
- peut avoir plusieurs profils
Maintenant, Dans mon code, je peux effectuer des requêtes sur les modèles générés pour l'identité et Profiletype.
Par exemple:
$q = Doctrine_Query::create()
->select('i.*')
->from('Identity i');
echo $q->getSqlQuery();
va travailler et produire:
SELECT i.id AS i__id, i.username AS i__username FROM identity i
Cependant, quand je vais exécuter une requête sur la table de profil, il ne fonctionnera pas. Même une simple requête telle que
$q = Doctrine_Query::create()
->select('p.*')
->from('Profile p');
echo $q->getSqlQuery();
échoue. J'ai essayé de changer le nom de classe dans le FROM à des « profils » au lieu de « Profil ». Toujours rien.
Toutes les idées sur ce que je fais mal.
La solution
Après avoir modifié toutes les variables possibles et tracer dans ma ligne par ligne modèle, je suis venu à une découverte embarrassante:
Le contrôleur que j'appelle la doctrine de la requête a été appelée profile.php.
profile.php
<?php
class Profile extends Controller {
function Profile() {
parent::Controller();
}
function index() {
$q = Doctrine_Query::create()
->from('Profile');
echo $q->getSqlQuery();
}
}
Ass dès que je le contrôleur nommé autre chose que « profil », tout à coup travaillé. Par exemple, en le nommant à docile.php:
docile.php
<?php
class Docile extends Controller {
function Docile() {
parent::Controller();
}
function index() {
$q = Doctrine_Query::create()
->from('Profile');
echo $q->getSqlQuery();
}
}
'Profil' ne semble pas être un mot réservé dans CodeIgniter ( lien texte ). Il ne semble, cependant, que vous ne pouvez pas appeler une « classe de table » doctrine d'une classe de contrôleur du même nom.
Merci pour vos gars d'entrée. Espérons que cela sauve quelqu'un d'autre tracas semblables.