Php fromArray,在Doctrine2中合并

Php fromArray,在Doctrine2中合并,php,doctrine-orm,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" =>

我有一个带有一些字段的简单表: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]);
}
if(数组[x][“id”]<0){
$record=新的$MyRecord();
$record->fromArray(数组[x]);
}否则{
$record=Doctrine::getTable($MyRecord)->find(数组[x][“id]”);
$record->merge(数组[x]);
}

但在D2中如何才能做到这一点呢?

在我的代码中,我通常在数组中传递/更新,然后在数组上循环分配类的每个成员变量。或者,如果需要执行更具体的操作,我只需手动将数组中的每个值分配给类成员变量。教义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);
}

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

我修改了@JeremyHicks函数,并在我的实体类中创建了一个新函数,因为PHP给出了语法错误。这是我的修订代码:/***同时设置所有提交的表单值。*@param field_type$allFormElements*/public function setAllFormElements($allFormElements){foreach($name=>$value){$this->$name=$value;}}}}@Jeremy Hicks对不起,merge命令在哪里?您只显示“插入”命令。