推进保存对象错误标记

时间:2014-04-29 22:20:28

标签: mysql symfony object propel

我的代码中有一小部分问题。 Symfony2,PROPEL ORM。

    $tagNames = $tags->getTags();
    $tagsArray = explode(',', $tagNames);

    $postTagToDelete = PostTagQuery::create()->filterByPostId($post->getId())->find();
    if ($postTagToDelete) {
        $postTagToDelete->delete();
    }

    foreach ($tagsArray as $tagName) {
        $tag = TagQuery::create()->filterByName($tagName)->findOne();
        //when i find an existing tag,
        // there is no need to create another one
        //I just simply add it **(it's not working here)**
        if ($tag != null) {
            $post->addTag($tag);

        } else {
            //when tag is new
            $tag = new Tag();
            $tag->setName($tagName);


            $post->addTag($tag);

        }
    }

每次我都在创建PostTag的新对象。我清理PostTag的主要对象,然后创建一个新的。

问题是,它总是不保存我在$ tagNames中的第一个标签。

更具体地说,让我们假装$tagsArray中有四个元素。

[first, second, third, fourth]

它们中的每一个都已经是数据库,因此它将首次进入if四次。

问题是只会保存secondthirdfourth。没有first。为什么呢?

另一个例子是,如果我有array[first]并执行相同的操作(first已经在数据库中),它将仅在第二次保存。 所以我每次请求尝试都会is in database, database empty, is in database, database empty,[...]

有什么建议吗?

谢谢,我真的需要它。

THX, d

毕竟我找到了像魅力一样的解决方案。

    $tagNames = $tags->getTags();
    $tagsArray = explode(',', $tagNames);
    $tagsArray = array_unique($tagsArray);

    $tagManager = $this->container->get('back_tag.manager');
    $tags = new PropelOwnCollection();
    foreach ($tagsArray as $tag) {
        if (is_numeric($tag)) { //naprawa bledu pluginu select2
            $tags->append($tagManager->findOneOrCreateById($tag));
        } else if (!empty($tag)) {
            $tags->append($tagManager->findOneOrCreateByName($tag));
        }
    }
    $post->setTags($tags);
    $post->save();

0 个答案:

没有答案