¿Por qué ORM de Doctrine no creará consulta SQL para mi modelo de 1 a varios?
-
29-09-2019 - |
Pregunta
Sé que esto tiene que tener una respuesta fácil, pero no puedo entenderlo. Después de las lágrimas, Estoy esperando que alguien aquí puede ayudar.
Esta es mi modelo 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)
Como se puede ver, 3 tablas vinculadas se generan:
Identidad
- puede tener varios perfiles
Profile @
- tiene una identidad
- tiene un Profiletype
Profiletype
- puede tener varios perfiles
Ahora, en mi código, puede realizar consultas sobre los modelos generados por la Identidad y Profiletype.
Por ejemplo:
$q = Doctrine_Query::create()
->select('i.*')
->from('Identity i');
echo $q->getSqlQuery();
va a funcionar y productos:
SELECT i.id AS i__id, i.username AS i__username FROM identity i
Sin embargo, cuando voy a ejecutar cualquier consulta en la tabla de perfiles, no va a funcionar. Incluso una simple consulta como
$q = Doctrine_Query::create()
->select('p.*')
->from('Profile p');
echo $q->getSqlQuery();
falla. He intentado cambiar el nombre de la clase en el DE de 'perfiles' en lugar de 'Perfil'. Todavía nada.
¿Alguna idea sobre lo que estoy haciendo mal.
Solución
Después de cambiar todas las variables posibles y rastreo a través de mi línea por línea del modelo, llegué a un embarazoso descubrimiento:
El controlador estaba llamando la Doctrina consulta desde fue llamado profile.php.
profile.php
<?php
class Profile extends Controller {
function Profile() {
parent::Controller();
}
function index() {
$q = Doctrine_Query::create()
->from('Profile');
echo $q->getSqlQuery();
}
}
Culo pronto como puse el nombre del controlador de otra cosa que no 'perfil', de repente todo funcionó. Por ejemplo, dándole el nombre de docile.php:
docile.php
<?php
class Docile extends Controller {
function Docile() {
parent::Controller();
}
function index() {
$q = Doctrine_Query::create()
->from('Profile');
echo $q->getSqlQuery();
}
}
'Perfil' no parece ser una palabra reservada en CodeIgniter ( enlace de texto ). No parece, sin embargo, que no se puede llamar una doctrina 'table class' de una clase controlador del mismo nombre.
Gracias por sus chicos de entrada. Espero que esto ahorra algún otro tipo de molestias similares.