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.

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top