Почему Doctrine ORM не будет создавать SQL-запрос для моей модели 1-ко-многим? - PullRequest
1 голос
/ 18 августа 2010

Я знаю, что это должен быть простой ответ, но я не могу понять это. После слез, я надеюсь, что кто-то здесь может помочь.

Вот моя модель 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)

Как видите, генерируются 3 связанные таблицы:

Идентичность
- может иметь несколько профилей

Профиль
- имеет одну Личность
- имеет один тип профиля

Profiletype
- может иметь несколько профилей

Теперь в моем коде я могу выполнять запросы к сгенерированным моделям для Identity и Profiletype.

Например:

        $q = Doctrine_Query::create()
          ->select('i.*')
          ->from('Identity i');
        echo $q->getSqlQuery();

будет работать и производить:

SELECT i.id AS i__id, i.username AS i__username FROM identity i

Однако, когда я иду, чтобы выполнить любой запрос к таблице профиля, он не будет работать. Даже простой запрос, такой как

        $q = Doctrine_Query::create()
          ->select('p.*')
          ->from('Profile p');
        echo $q->getSqlQuery();

выходит из строя. Я попытался изменить имя класса в FROM на «Профили» вместо «Профиль». Все еще ничего.

Любые идеи о том, что я делаю неправильно.

1 Ответ

0 голосов
/ 20 августа 2010

После изменения каждой возможной переменной и построчной трассировки моей модели я пришел к смущающему открытию:

Контроллер, с которого я вызывал Doctrine Query, назывался profile.php.

profile.php

<?php
class Profile extends Controller {

    function Profile()     {
        parent::Controller();
    }

    function index()     {
        $q = Doctrine_Query::create()
            ->from('Profile');
        echo $q->getSqlQuery();
    }

}

Задница, как только я назвал контроллер чем-то другим, кроме 'профиля', все это внезапно сработало. Например, назвав его docile.php:

docile.php

<?php
class Docile extends Controller {

    function Docile()     {
        parent::Controller();
    }

    function index()     {
        $q = Doctrine_Query::create()
            ->from('Profile');
        echo $q->getSqlQuery();
    }

}

«Профиль» не является зарезервированным словом в CodeIgniter ( текст ссылки ). Однако оказывается, что вы не можете вызвать доктрину «табличный класс» из класса контроллера с тем же именем.

Спасибо за ваш вклад, ребята. Надеюсь, это спасет кого-то еще от подобных неприятностей.

...