小编Ger*_*rgő的帖子

如何在与 Doctrine 的多对多关系中避免重复条目?

我正在使用嵌入的 Symfony 表单Tag从文章编辑器中添加和删​​除实体。Article是协会的拥有方

class Article
{
    /**
     * @ManyToMany(targetEntity="Tags", inversedBy="articles", cascade={"persist"})
     */
    private $tags;

    public function addTag(Tag $tags)
    {
        if (!$this->tags->contains($tags)) // It is always true.
            $this->tags[] = $tags;
    }
}
Run Code Online (Sandbox Code Playgroud)

条件在这里没有帮助,因为它始终为真,如果不是,则根本不会将新标签持久化到数据库中。这是Tag实体:

class Tag
{
    /**
     * @Column(unique=true)
     */
    private $name

    /**
     * @ManyToMany(targetEntity="Articles", mappedBy="tags")
     */
    private $articles;

    public function addArticle(Article $articles)
    {
        $this->articles[] = $articles;
    }
}
Run Code Online (Sandbox Code Playgroud)

我已设置$name为唯一,因为我想每次在表单中输入相同的名称时都使用相同的标签。但它不能这样工作,我得到了例外:

违反完整性约束:1062 重复条目

我需要更改什么才能使用article_tag提交标记名称时的默认连接表,该Tag表已在表中?

php symfony doctrine-orm

5
推荐指数
2
解决办法
7125
查看次数

如何使用XmlStarlet将具有属性的元素插入XML文件?

源XML

<xml>
    <block>
        <el name="a">92346</el>
        <el name="b">lorem</el>
    </block>
    <block>
        <el name="a">89753</el>
        <el name="b">ipsum</el>
    </block>
</xml>
Run Code Online (Sandbox Code Playgroud)

宾语

我想<el name="c">0</el>在每个<block>Linux shell脚本中插入一个元素:

<xml>
    <block>
        <el name="a">92346</el>
        <el name="b">lorem</el>
        <el name="c">0</el>
    </block>
    <block>
        <el name="a">89753</el>
        <el name="b">ipsum</el>
        <el name="c">0</el>
    </block>
</xml>
Run Code Online (Sandbox Code Playgroud)

我可以使用XmlStarlet附加元素:

xmlstarlet ed -a '/xml/block/el[@name="b"]' \
              --type 'elem' -n 'el' -v 0
Run Code Online (Sandbox Code Playgroud)

问题

  1. 选择每个<el>没有name属性的元素的XPath表达式是什么?
  2. 我可以附加元素并使用单个xml ed命令插入属性 吗?

xml shell xpath xmlstarlet

4
推荐指数
1
解决办法
5768
查看次数

如何将实体管理器传递给Symfony中的嵌入表单?

我可以$this->createForm(new EntityType(), $entity, array('em' => $em))从控制器做,但我怎么能把它传递给NestedEntityType()?我想我不能只是从里面传递它EntityType->buildForm():

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $entityManager = $options['em'];

    $builder->add('entities', 'collection', array(
        'type' => new NestedEntityType(),
        'allow_add' => true,
        'allow_delete' => true,
        'by_reference' => false
    ));
}
Run Code Online (Sandbox Code Playgroud)

我需要实体管理器来设置数据转换器以检查数据库中是否已存在实体,并在关系中使用该实体而不是创建具有相同名称的新实体.

资源

php symfony

4
推荐指数
2
解决办法
8692
查看次数

为什么Doctrine getter方法为ID返回null?

我在Symfony项目的类表继承设置中使用自动生成的getter .getId()返回null,而其他每个getter都有效.你能发现任何问题吗?我应该搜索什么?我手动导入数据库条目,但我不认为这是原因.

抽象的父实体

//src/Acme/WebzineBundle/Entity/Content.php
namespace Acme\WebzineBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * Content
 *
 * @ORM\Table()
 * @ORM\Entity
 * @ORM\InheritanceType("JOINED")
 * @ORM\DiscriminatorColumn(name="heading", type="integer")
 * @ORM\DiscriminatorMap({
 *   0 = "Review"
 * })
 */
abstract class Content
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="edited", type="date")
     */
    private $edited;


    /**
     * Get id
     *
     * @return integer 
     */
    public function getId()
    {
        return …
Run Code Online (Sandbox Code Playgroud)

php symfony doctrine-orm

3
推荐指数
1
解决办法
2903
查看次数

标签 统计

php ×3

symfony ×3

doctrine-orm ×2

shell ×1

xml ×1

xmlstarlet ×1

xpath ×1