Perché sarà ORM Doctrine non creerà query SQL per il mio modello 1-a-molti?
-
29-09-2019 - |
Domanda
So che questo deve avere una risposta facile, ma non riesco a capirlo. Dopo le lacrime, sto sperando che qualcuno qui può aiutare.
Ecco il mio modello 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)
Come si può vedere, 3 tabelle collegate vengono generati:
Identità
- può avere più profili
Profilo
- ha una
Identità
- ha una Profiletype
Profiletype
- può avere più profili
Ora, Nel mio codice, posso eseguire query sui modelli generati per Identità e Profiletype.
Ad esempio:
$q = Doctrine_Query::create()
->select('i.*')
->from('Identity i');
echo $q->getSqlQuery();
funzionerà e prodotti:
SELECT i.id AS i__id, i.username AS i__username FROM identity i
Tuttavia, quando vado a correre qualsiasi richiesta sul tavolo, profilo, non funzionerà. Anche una semplice query, ad esempio
$q = Doctrine_Query::create()
->select('p.*')
->from('Profile p');
echo $q->getSqlQuery();
non riesce. Ho provato a cambiare il nome della classe nella FROM a 'Profili' invece di 'profilo'. Ancora niente.
Tutte le idee su quello che sto facendo di sbagliato.
Soluzione
Dopo aver modificato tutte le variabili possibili e rintracciare attraverso il mio modello di linea per linea, sono venuto a una scoperta imbarazzante:
Il controller stavo chiamando la Dottrina Query è stato chiamato da 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 appena ho chiamato il controller qualcosa di diverso 'profilo', tutto ad un tratto ha funzionato. Ad esempio, chiamandolo a docile.php:
docile.php
<?php
class Docile extends Controller {
function Docile() {
parent::Controller();
}
function index() {
$q = Doctrine_Query::create()
->from('Profile');
echo $q->getSqlQuery();
}
}
'profilo' non sembra essere una parola riservata in CodeIgniter ( link testuale ). E sembra, tuttavia, che non si può chiamare una dottrina 'di classe tabella' da una classe controller con lo stesso nome.
Grazie per i vostri ragazzi di ingresso. Spero che questo consente di risparmiare qualcun altro fastidi simili.