我正在使用嵌入的 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表已在表中?
<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)
<el>没有name属性的元素的XPath表达式是什么?xml ed命令插入属性
吗?我可以$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)
我需要实体管理器来设置数据转换器以检查数据库中是否已存在实体,并在关系中使用该实体而不是创建具有相同名称的新实体.
资源
我在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)