Im пытается обновить объект отношения «один-два-один» объекта.Отношение доктрины Doctrine не обновляется
Это код, я использую:
$em = $this->getDoctrine()->getManager();
$request = Request::createFromGlobals();
$user = $this->get('security.context')->getToken()->getUser();
# find thread
$thread = $em->getRepository('MyBundle:Thread')->findThreadById($threadid);
# find thread posts
$query = $em->getRepository('MyBundle:Post')->findThreadPosts($thread->getId());
# create form
$form = $this->createForm(new PostType(), new Post($user, $thread));
# handle form
$form->handleRequest($request);
if ($form->isValid()) {
$post = $form->getData();
$em->persist($post);
$em->flush();
$logger->debug("POST CREATED with id: " . $post->getId());
$thread->setLastPost($post);
$thread->addPostCount(1);
$thread->setLastPostCreator($user);
$em->flush();
$logger->debug("ADDED LAST POST TO thread with id: " . $thread->getId());
$forum = $thread->getForum();
$forum->setLastPostCreator($user);
$forum->addPostCount(1);
$forum->setLastPostCreator($user);
$forum->setLastPost($post);
$em->flush();
$this->get('session')->getFlashBag()->add(
'notice',
'Your post has been added!'
);
}
$data['posts'] = $posts;
$data['thread'] = $thread;
$data['form'] = $form->createView();
Mapping сообщение:
<?xml version="1.0" encoding="utf-8"?>
<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
<entity name="MyBundle\Entity\Post" table="post">
<id name="id" type="integer" column="id">
<generator strategy="IDENTITY"/>
</id>
<field name="text" type="text" column="text" nullable="false"/>
<many-to-one field="thread" target-entity="Thread" inversed-by="posts">
<join-columns>
<join-column name="thread_id" referenced-column-name="id"/>
</join-columns>
</many-to-one>
</entity>
</doctrine-mapping>
Mapping Тема:
<?xml version="1.0" encoding="utf-8"?>
<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
<entity name="MyBundle\Entity\Thread" table="thread">
<id name="id" type="integer" column="id">
<generator strategy="IDENTITY"/>
</id>
<field name="postCount" type="integer" column="post_count" nullable="false"/>
<one-to-one field="lastPost" target-entity="Post">
<join-column name="last_post_id" referenced-column-name="id"/>
</one-to-one>
<one-to-many field="posts" target-entity="Post" mapped-by="thread" />
</entity>
</doctrine-mapping>
Entity: сеттер Тема
public function setLastPost(Post $lastPost)
{
$this->lastPost = $lastPost;
}
public function getLastPost()
{
return $this->lastPost;
}
Поэтому всякий раз, когда я добавляю сообщение, я обновляю его родительский (поток). Таким образом, поток имеет последнее сообщение в виде ссылки «много-в-один». Я также обновляю счет только как вопрос кэширования и сокращения объединений.
счет действительно увеличивается правильно. Однако последнее сообщение не обновляется. Когда я просматриваю свои журналы отладки, я также вижу, что для этого не выполняется запрос.
любые идеи/мысли по этому вопросу? моя лучшая догадка заключалась в том, что она не обнаруживает изменения, но я понятия не имею, как сделать недействительными данные такого типа.
Нам нужно увидеть сопоставления для сообщений и потоков. –
Обновлено мое исходное сообщение с сопоставлениями –
Неужели 'Thread :: lastPost' установлен никогда? Или он не может быть изменен после первого раза, когда установлена ассоциация? Можете ли вы добавить действие с созданием «Thread»? – origaminal