Warum wird Doctrine ORM nicht SQL-Abfrage für mein 1-to-many-Modell erstellen?
-
29-09-2019 - |
Frage
Ich weiß, dass dies eine einfache Antwort haben, aber ich kann es nicht herausgefunden. Nach Tränen, jemand hier kann ich gehofft, ich helfen.
Hier ist mein YML Modell:
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)
Wie Sie sehen können, 3 verknüpfte Tabellen erzeugt werden:
Identität
- können mehrere Profile haben
Profil
- hat eine Identität
- hat ein Profil
Profile
- können mehrere Profile haben
Nun, in meinem Code, ich kann Abfragen auf den generierten Modelle für Identity und Profiledurchführen.
Zum Beispiel:
$q = Doctrine_Query::create()
->select('i.*')
->from('Identity i');
echo $q->getSqlQuery();
arbeiten und produzieren:
SELECT i.id AS i__id, i.username AS i__username FROM identity i
Allerdings, wenn ich gehe jede Abfrage auf der Profiltabelle laufen, wird es nicht funktionieren. Selbst eine einfache Abfrage wie
$q = Doctrine_Query::create()
->select('p.*')
->from('Profile p');
echo $q->getSqlQuery();
versagt. Ich habe versucht, in der FROM zu ‚Profilen‘ anstelle von ‚Profil‘ die Klassennamen zu ändern. Immer noch nichts.
Alle Ideen, was ich falsch mache.
Lösung
Nach jedem möglichen variablen Ändern und Tracing durch mein Modell Zeile-für-Zeile, kam ich zu einer peinlichen Entdeckung:
Der Controller ich die Lehre Abfrage rief aus profile.php aufgerufen wurde.
profile.php
<?php
class Profile extends Controller {
function Profile() {
parent::Controller();
}
function index() {
$q = Doctrine_Query::create()
->from('Profile');
echo $q->getSqlQuery();
}
}
Ass sobald ich den Controller etwas anderes als ‚Profil‘ genannt, es ist alles auf einmal gearbeitet. Zum Beispiel, es Namensgebung 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' erscheint nicht ein reserviertes Wort in CodeIgniter ( link text ). Es scheint jedoch, dass Sie nicht eine Lehre ‚Tabellenklasse‘ aus einer Controller-Klasse mit dem gleichen Namen nennen können.
Vielen Dank für Ihre Eingabe Jungs. Hoffe, das spart jemand anderes ähnliche Probleme.