如何将方法替换为foreach循环内的变量?

问题描述 投票:0回答:2

这是fieldsData:

{#1292 ▼
  +"167d580ee0": 1
  +"20fc1f0271": 2
  +"585687a0fb": 3
}

我的控制器:

 foreach ($fieldsData as $uuid => $fieldId) {

  $fieldsEntity = $this->getDoctrine()->getRepository($en)->findOneBy(['id' => $fieldId]);
  $name = $fieldsEntity->getName();

  $entity = new $EntityName();

  $entity->setName("test");
  $entity->setAge("test");
  $entity->setJob("test");

 }

 $this->em->persist($entity);
 $this->em->flush();

到目前为止效果很好。但是我想用这样的变量替换方法:

 foreach ($fieldsData as $uuid => $fieldId) {

   $fieldsEntity = $this->getDoctrine()->getRepository($en)->findOneBy(['id' => $fieldId]);
   $name = $fieldsEntity->getName();

   $entity = new $EntityName();
   $func = 'set' . $name;
   $entity->$func("test");

 }

 $this->em->persist($entity);
 $this->em->flush();

但是我现在收到错误消息:

SQLSTATE [23000]:违反完整性约束:1048列“名称”不能为空

我不理解,因为当我转储$name时,我得到了输出:

name
age
job
php symfony variables foreach doctrine
2个回答
1
投票

您将在每次迭代中创建一个新的$entity

您说过当您转储$name时,会得到以下输出结果:

name
age
job

这意味着,last迭代将得出以下结果:

foreach ($fieldsData as $uuid => $fieldId) {

   $fieldsEntity = $this->getDoctrine()->getRepository($en)->findOneBy(['id' => $fieldId]);
   $name = $fieldsEntity->getName();

   $entity = new $EntityName();
   $func = 'set' . 'job';
   $entity->$func("test");

 }

 $this->em->persist($entity); // you didn't set name in $entity, but only job.
 $this->em->flush();

移动$entity = new $EntityName(); 之前 foreach


0
投票

为此任务使用属性访问器:

use Symfony\Component\PropertyAccess\PropertyAccess;

$propertyAccessor = PropertyAccess::createPropertyAccessor();
$propertyAccessor->setValue($entity, $name, 'test');

更多信息:https://symfony.com/doc/current/components/property_access.html#usage

© www.soinside.com 2019 - 2024. All rights reserved.