fromArray,合并Doctrine2

时间:2011-05-19 08:08:38

标签: php doctrine-orm

我有一个包含一些字段的简单表:id,name ....它将出现在浏览器的网格中,用户可以添加/编辑记录。这就是为什么在保存操作中我将给出带有记录的数组,其中新记录id是负数,例如:

array[0] = {"id" => "-1", "name" => "New record 1"}
array[1] = {"id" => "-2", "name" => "New record 2"}
array[2] = {"id" => "1", "name" => "Exist record 1"}
array[3] = {"id" => "2", "name" => "Exist record 2"}

在学说1中我使用了这个:

if (array[x]["id"] < 0) {
  $record = new $MyRecord();
  $record->fromArray(array[x]);
} else {
  $record = Doctrine::getTable($MyRecord)->find(array[x]["id"]);
  $record->merge(array[x]);
}

但我怎么能在D2中做到这一点?

1 个答案:

答案 0 :(得分:3)

在我创建/更新的代码中,我通常传入数组,然后遍历它,分配类的每个成员变量。或者如果我需要做更具体的事情,我只需手动将数组中的每个值分配给类成员变量。学说2要求你在做某些事情时要更加明确。以下是服务类的示例方法。

public function createPage(array $data)
{
    $page = new \Entity\Page();

    $page->setName($data['name']);
    $page->setUrl($data['url']);
    $page->setContent($data['content']);
    $page->setSite($this->em->getReference('Entity\Site', $data['site']));

    $this->em->persist($page);
}

这是循环的另一个例子:

public function createUser(array $data)
{
    $user = new \Entity\User();
    foreach ($data as $key => $value) {
        $user->'set' . ucfirst($key)($value);
    }

    $this->em->persist($user);
}

第二个带循环的示例只有在您知道您的实体没有对其他实体的任何引用时才会起作用(例如,在第一个示例中,页面有一个站点)。