我的代码中有一小部分问题。 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
四次。
问题是只会保存second
,third
和fourth
。没有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();