2010-08-18 11 views
1

Je sais que cela doit avoir une réponse facile, mais je ne peux pas comprendre. Après les larmes, j'espère que quelqu'un ici pourra m'aider.Pourquoi DOCM ORM ne créera-t-il pas de requête SQL pour mon modèle un-à-plusieurs?

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ées:

Identité
- peut avoir plusieurs profils

Profil
- a un Identité
- a un Profil type

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 fonctionner 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 requête simple 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 en 'Profiles' au lieu de 'Profile'. Toujours rien.

Toutes les idées sur ce que je fais mal.

+0

hmm ... impossible de reproduire votre erreur. quel genre d'erreur obtenez-vous? Je suppose que vous utilisez MySQL. avez-vous essayé une définition de schéma moins verbeuse, par exemple: ne définissez pas les identifiants de vos modèles et ne définissez que l'alias étranger pour vos relations. ne devrait pas importer, mais vaut le coup. –

+0

L'erreur lancée serait utile. Y a-t-il du code personnalisé dans les modèles'Base' (ou ailleurs) qui pourrait être appelé? – DrColossos

+0

@Darragh: oui, j'utilise mysql. J'ai essayé différents schémas. D'habitude, je suis beaucoup moins verbeux dans ma définition, cependant, étant donné que je m'arrachais les cheveux, j'ai essayé d'épeler les choses complètement dans le schéma. D'autres idées? –

Répondre

0

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 (link text). Il semble cependant que vous ne puissiez pas appeler une doctrine 'classe de table' à partir d'une classe de contrôleur du même nom.

Merci pour votre contribution les gars. J'espère que cela sauve quelqu'un d'autres tracas similaires.