Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检测Symfony2中的实体错误配置_Symfony_Doctrine Orm - Fatal编程技术网

检测Symfony2中的实体错误配置

检测Symfony2中的实体错误配置,symfony,doctrine-orm,Symfony,Doctrine Orm,嗯,我不知道如何修复我项目中的一个bug 我正在尝试处理具有多对多属性关系的嵌套表单。 错误表明它无法创建关联,因为其中一个边需要ID 好的。所以我试着去创造缺失的一面。 但还是一样的错误 最后,我意识到这个简单的代码仍然存在同样的问题: public function onSuccess(Page $page) { $this->em->flush(); } 如果有一条错误消息,比如“嘿,没什么可冲洗的!” 但是没有,仍然是相同的错误:我必须在关联对象之前创建对象(

嗯,我不知道如何修复我项目中的一个bug

我正在尝试处理具有多对多属性关系的嵌套表单。 错误表明它无法创建关联,因为其中一个边需要ID

好的。所以我试着去创造缺失的一面。 但还是一样的错误

最后,我意识到这个简单的代码仍然存在同样的问题:

public function onSuccess(Page $page)
{   
    $this->em->flush();
}
如果有一条错误消息,比如“嘿,没什么可冲洗的!” 但是没有,仍然是相同的错误:我必须在关联对象之前创建对象(及其id)

我查看了堆栈跟踪。是的,看起来UnitOfWork->ComputeAsociationChanges在刷新之后被调用,并且需要关联对象的ID


如果flush命令生成错误,如何在数据库中创建对象?

问题是由于实体类中的一个主要拼写错误造成的。 我通过检查模式结构,使用Symfony的附加组件找到了它:

<?php
namespace Lp\LibBundle\Command;

use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Bundle\DoctrineBundle\Command\Proxy\DoctrineCommandHelper;
use Doctrine\ORM\Tools\Console\Command\ValidateSchemaCommand;

class MyValidateSchemaCommand extends ValidateSchemaCommand
{

/**
 * (non-PHPdoc)
 * @see Tools/Console/Command/Doctrine\ORM\Tools\Console\Command.ValidateSchemaCommand::configure()
 * 
 * Modifies name of the command to be in Doctrine namespace
 * Adds the Helper em for the entity manager which is not defined in Doctrine class 
 * @author ulrich, 09/09/11
 */
protected function configure()
{
    parent::configure();
    $this->setName('doctrine:orm:validate-schema');
    $this->addOption('em', null, InputOption::VALUE_OPTIONAL, 'The entity manager to use for this command');
}

/**
 * (non-PHPdoc)
 * @see Tools/Console/Command/Doctrine\ORM\Tools\Console\Command.ValidateSchemaCommand::execute()
 * 
 * Ajoute le Helper em pour l'entity manager qui n'est pas définis dans la class Doctrine
 * @author ulrich, 09/09/11
 */
protected function execute(InputInterface $input, OutputInterface $output)
{
    DoctrineCommandHelper::setApplicationEntityManager($this->getApplication(), $input->getOption('em'));

            return parent::execute($input, $output);
}

您使用的id生成策略是什么?原则2手册第4.8节。如果它是自动的,那么你不需要做任何特别的冲洗。如果使用手动策略,则需要在刷新之前创建id。可能会考虑创建一个命令对象并在不经过所有表单处理的情况下测试您的模型。谢谢您的回答(很抱歉这么晚才回复……)。我的大多数表都是自动生成的id。只有一张桌子是空的。这是包含多对多关系属性的表。因此,它只有每边的两个ID和属性。我同意为了建立这种关系,我需要先拥有两个ID。什么是命令对象?我怎样才能用它来测试模型呢?
> php app/console doctrine:orm:validate-schema