自从我尝试使用attribute处理多对多关系以来,已经有相当长的一段时间了。
我重新检查了实体,表格...一切看起来都很好。仍然有错误:
这种关系是这样建立的:书
嵌套表单允许创建书籍,从中创建具有年份属性的作者。
到目前为止,我只是试图记录新作者,以便在处理与一本书的关系之前让他们存在。
这是我的代码:
foreach ($book->getAuthorBooks() as $authorBook) {
$AuthorUrlname = $this->mu->generateUrlname( $authorBook->getAuthor()->getFirstname().'-'.$authorBook->getAuthor()->getLastname() );
// If the author does not exist yet, it is added to the database:
$checkAuthor = $this->em->getRepository('cmdMyBundle:Author')->findOneByUrlname($AuthorUrlname);
if ($checkAuthor == null) {
// Author does not exist
$newAuthor = new Author();
$newAuthor->setLastname($authorBook->getAuthor()->getLastname());
$newAuthor->setFirstname($authorBook->getAuthor()->getFirstname());
$newAuthor->setUrlname($AuthorUrlname);
$newAuthor->setCollection($this->collection);
$this->em->persist($newAuthor);
$this->em->flush();
}else{
// Author already exists
}
}// foreach $authorBook
错误:通过关系“cmd\MyBundle\Entity\Book#AuthBooks”找到了一个新实体,该实体未配置为实体的级联持久化操作:cmd\MyBundle\Entity\authorBook@0000000002571fc4000000002c4ddfaa。
为什么该错误与authorBooks关系有关?我的代码只尝试记录新作者。。。
谢啦
编辑_____________
事实上,我做了进一步的测试,并且使用此代码进行了激烈的测试:
public function onSuccess(Page $page){
$this->em->flush();
这也会生成相同的错误,就好像错误不是由于表单处理代码...我使用此方法验证了orm模式,到目前为止一切看起来都很好。
我尝试级联持久化实体:
class AuthorBook
{
/**
* @ORM\Id
* @ORM\ManyToOne(targetEntity="cmd\MyBundle\Entity\Author", inversedBy="authorBooks", cascade={"persist"})
* @ORM\JoinColumn(nullable=false)
*/
private $author;
/**
* @ORM\Id
* @ORM\ManyToOne(targetEntity="cmd\MyBundle\Entity\Book", inversedBy="authorBooks", cascade={"persist"})
* @ORM\JoinColumn(nullable=false)
*/
private $book;
--
class Book
{
/**
* @var integer $id
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\OneToMany(targetEntity="cmd\MyBundle\Entity\AuthorBook", mappedBy="book", cascade={"persist"})
*/
private $authorBooks;
--
class Author
{
/**
* @var integer $id
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\OneToMany(targetEntity="cmd\MyBundle\Entity\AuthorBook", mappedBy="author", cascade={"persist"})
*/
private $authorBooks;
这将更新错误消息:
AuthorBook类型的实体通过外部实体作者具有标识,但此实体本身没有实体。您必须在相关实体上调用EntityManager#persist(),并确保在尝试持久化“AuthorBook”之前为其生成了标识符。对于插入后ID生成(如MySQL自动递增或PostgreSQL串行),这意味着您必须在两个持久化操作之间调用EntityManager#flush()。
我知道我需要在AuthorBook之前坚持和刷新书籍和作者。然而,我不能刷新任何东西。当我不坚持任何东西时,我甚至有这个错误。
如果AuthorBook中没有更多的列(只有外键),我可以尝试建立多个关系。
Url:多对多原则文档
您的类AuthorBook
有问题。删除$作者
和$book
的@ORM\Id
并添加正确的id字段。更新架构时应该有错误消息,但如果没有:
php app/console doctrine:schema:update --force;
将AuthorBook
更新为:
class AuthorBook
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*
* @var integer $id
*/
protected $id;
/**
* @ORM\ManyToOne(targetEntity="cmd\MyBundle\Entity\Author", inversedBy="authorBooks", cascade={"persist"})
* @ORM\JoinColumn(nullable=false)
*/
private $author;
/**
*
* @ORM\ManyToOne(targetEntity="cmd\MyBundle\Entity\Book", inversedBy="authorBooks", cascade={"persist"})
* @ORM\JoinColumn(nullable=false)
*/
private $book;
问题内容: 如果将新文档索引到Elasticsearch索引,则可在索引操作后1秒钟左右搜索新文档。但是,可以通过调用或对索引进行操作来强制使该文档可立即搜索。这两个操作之间有什么区别- 结果似乎对他们来说是相同的,可以立即搜索文档。 这些操作中的每一项到底是什么? ES文档似乎并未深入解决此问题。 问题答案: 您得到的答案是正确的,但我认为值得详细说明。 刷新有效地调用了Lucene索引读取器上
问题内容: 我有一个JList,它显示来自矢量的信息。然后,用户可以从该向量中添加和删除信息。从Vector添加/删除项目时,是否可以刷新JFrame中的JList?目前我正在做.. 但这不会将JList刷新为新内容。我检查了一下,矢量内容等确实发生了变化,但列表没有刷新。为什么?我该如何解决? 问题答案: 您不应该更新Vector。应该直接对ListModel进行更改,然后表将自动重新绘制自身。
我是一个绝对的初学者laravel。 我想在我的数据库中做一些改变。但是当我试图刷新我的数据库时,我一直在处理下面的错误。 在写这篇文章之前,我在谷歌上搜索了很多东西,阅读了很多参考资料。然而,所有这些都不起作用,帮助我解决了错误。 以前有人遇到过这个错误吗?如有任何建议,将不胜感激。提前谢谢。 PHP致命错误:未捕获异常“UnexpectedValueException”,消息为“流或文件”/w
使用Debezium 0.7从MySQL读取,但在初始快照阶段会出现刷新超时和OutOfMemoryError错误。看下面的日志,连接器似乎试图一次写入太多消息: 想知道正确的设置是什么http://debezium.io/docs/connectors/mysql/#connector-大型数据库的属性( 按照以下建议更改了设置,并解决了问题:
我到处找,但很少有人有这个问题。 在使用外部系统时出现异常:java.lang.assertionerror位于org.jetbrains.plugins.gradle.service.project.baseGradleProjectResolverExtension.populateModuleContentRoot(baseGradleProjectResolverExtension.jav
我做了这段代码,我需要在屏幕上实时显示一些值,所以,我试着这样做,有人知道是怎么回事吗? 安卓显示器: java.lang.NullPointerException:尝试在Android.Widget.TextView.OnMeasure(TextView.java:7520)的Android.View.View.Measure(View.java:19917)的Android.View.View