在Doctrine 1.2中,可以为一个表设置Key Mapping,其中由该表创建的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文件中设置它?
答案 0 :(得分:5)
在探索类似问题时,我遇到了this example:
--- 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 doctrine:build --all --no-confirmation >> doctrine Dropping "doctrine" database >> doctrine Creating "dev" environment "doctrine" database >> doctrine generating model classes >> file+ /tmp/doctrine_schema_60681.yml ... >> doctrine generating form classes Couldn't set collection key attribute. No such field 'slug'.
要使上述功能正常运行,您需要明确指定slug
列,即使Sluggable
模板通常会自动为您创建:
User:
actAs:
Sluggable: ~
columns:
...
slug:
type: string(50)
unique: true
attributes:
coll_key: slug
答案 1 :(得分:0)
如果可能,则没有详细记录。 您可以在表定义like this中指定表的选项 知道了
const ATTR_COLL_KEY = 108;
我会尝试:
User:
options:
attr_coll_key: username
然后
User:
options:
attrCollKey: username
甚至
User:
options:
108: username
我无法准确找到代码中处理选项的位置,但您可以使用xdebug逐步调试来完成此操作。
祝你好运,如果其中一项尝试有效,请告诉我们使用。