1

我知道这必须有一个简单的答案,但我无法弄清楚。泪流满面,我希望这里有人可以提供帮助。

这是我的 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个链接表:

身份
- 可以有多个配置文件

Profile
- 有一个 Identity
- 有一个 Profiletype

Profiletype
- 可以有多个 Profile

现在,在我的代码中,我可以对生成的 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

但是,当我在 Profile 表上运行任何查询时,它将不起作用。即使是一个简单的查询,例如

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

失败。我尝试将 FROM 中的类名更改为“配置文件”而不是“配置文件”。依然没有。

关于我做错了什么的任何想法。

4

1 回答 1

0

在更改了所有可能的变量并逐行跟踪我的模型后,我发现了一个令人尴尬的发现:

我从中调用 Doctrine Query 的控制器称为 profile.php。

配置文件.php

<?php
class Profile extends Controller {

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

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

}

一旦我将控制器命名为“配置文件”以外的其他名称,它就突然起作用了。例如,将其命名为 docile.php:

温顺的.php

<?php
class Docile extends Controller {

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

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

}

'Profile' 似乎不是 CodeIgniter 中的保留字(链接文本)。但是,您确实不能从同名的控制器类中调用学说“表类”。

感谢您的输入。希望这可以节省其他人类似的麻烦。

于 2010-08-20T06:08:51.283 回答