6

在 Doctrine 1.2 中,可以为表设置键映射Doctrine_Collection由该表创建的对象将填充集合中每条记录中特定列的键。

上面链接的文档中的一个示例:

您可能想要映射名称列:

// test.php

// ...
$userTable = Doctrine_Core::getTable('User');

$userTable->setAttribute(Doctrine_Core::ATTR_COLL_KEY, 'username');

现在用户集合将使用 name 列的值作为元素索引:

// test.php

// ...
$users = $userTable->findAll();

foreach($users as $username => $user) {
    echo $username . ' - ' . $user->created_at . "\n";
}

有没有办法在 schema.yml 文件中进行设置?

4

2 回答 2

5

在探索类似问题时,我遇到了这个例子

---
User:
  columns:
    ...
  attributes:
    export: all
    validate: true

coll_key对属性应用相同的原则会产生以下结果:

User:
  columns:
    ...
  attributes:
    coll_key: username

我们可以在构建后验证该属性是否被接受:

$this->setAttribute(Doctrine_Core::ATTR_COLL_KEY, 'username');

不过,有一个警告。您必须显式创建要使用的列,否则 Doctrine 将在构建过程中抛出错误:

User:
  actAs:
    Sluggable:  ~
  columns:
    ...
  attributes:
    coll_key:  slug
$ symfony 学说:构建 --all --no-confirmation
>> 教义 删除“教义”数据库
>> 教义创建“dev”环境“教义”数据库
>> 学说生成模型类
>> 文件+ /tmp/doctrine_schema_60681.yml
   ...
>> 学说生成表单类

  无法设置集合键属性。没有这样的领域“蛞蝓”。

要使上述内容起作用,您需要显式指定slug列,即使Sluggable模板通常会自动为您创建它:

User:
  actAs:
    Sluggable:  ~
  columns:
    ...
    slug:
      type:    string(50)
      unique:  true
  attributes:
    coll_key:  slug
于 2011-08-21T18:11:53.207 回答
0

如果可能的话,它没有很好的记录。您可以在表定义中为表指定选项,如下 所示

const ATTR_COLL_KEY             = 108;

我会尝试 :

User:
  options:
    attr_coll_key: username

然后

User:
  options:
    attrCollKey: username

甚至

User:
  options:
    108: username

我无法准确找到在代码中处理选项的位置,但您可以通过 xdebug 逐步调试来做到这一点。

祝你好运,如果这些尝试之一有效,请告诉使用。

于 2011-08-21T10:26:06.387 回答