Я использую пакет DoctrineFixtures для создания примеров сущностей во время разработки. В моем методе load () приспособлений ORM я определяю данные как ассоциативные массивы и создаю объект сущности в цикле.
<?php
// ...
public function load($manager) {
$roleDefs = array(
'role-1' => array(
'role' => 'administrator'
),
'role-2' => array(
'role' => 'user'
),
);
foreach($roleDefs as $key => $roleDef) {
$role = new Role();
$role->setRole($roleDef['role']);
$manager->persist($role);
$this->addReference($key, $role);
}
$manager->flush();
}
Я всегда использую одну и ту же схему массива. Каждый элемент массива использует имя свойства (в нотации подчеркивания) объекта в качестве индекса. Если структура сущности становится более сложной, появляется много строк $ entity-> setMyProperty ($ def ['my_property']);
.
Я думаю, что проблема сопоставления имен свойств с методами установки - очень распространенная проблема в Symfony и Doctrine, поскольку этот тип сопоставления встречается во многих ситуациях (например, сопоставление форм с сущностями).
Теперь мне интересно, есть ли встроенный метод, который можно использовать для сопоставления. Было бы неплохо иметь такое решение, как
foreach($defs as $key => $def) {
$entity = $magicMapper->getEntity('MyBundle:MyEntity', $def);
// ...
}
Есть ли у кого-нибудь идеи, как этого можно достичь?
Большое спасибо, Hacksteak