有没有办法强制 ManyToMany 关系表现为 ManyToOne?
Is there any way to force a ManyToMany relationship behaves as ManyToOne?
我有这两个实体 Command
和 Predetermined
,它们是相关的 ManyToMany
:
class Command
{
use IdentifierAutogeneratedTrait;
use TimestampableEntity;
use ActiveTrait;
/**
* @var string
* @ORM\Column(type="string", length=150)
*/
private $name;
/**
* @var string
* @ORM\Column(type="text", nullable=true)
*/
private $description;
/**
* @var Predetermined[]
* @ORM\ManyToMany(targetEntity="Predetermined", mappedBy="commands", cascade={"persist"})
*/
private $predetermined;
...
}
class Predetermined
{
use IdentifierAutogeneratedTrait;
use TimestampableEntity;
use ActiveTrait;
/**
* @var string
* @ORM\Column(type="string", length=160)
* @Assert\NotBlank()
*/
private $smsText;
/**
* @var Command[]
* @ORM\ManyToMany(targetEntity="Command", inversedBy="predetermined", cascade={"persist", "remove"})
* @ORM\JoinTable(name="predetermined_has_command")
*/
private $commands;
...
}
有什么方法可以使用一种形式(这是我在这里看到的唯一一种形式)来改变他们的行为方式?看看下面的图片:
我允许在这里选择许多命令,这就是为什么我使用 ManyToMany
但是 ...
在这一个中我没有,所以我仍然需要使用相同的实体,但在表单级别更改行为。任何人都可以给我一些帮助吗?我该如何实现?
通常在您的 FormBuilder 字段中使用 multiple
属性,例如
$builder->add('commands', 'entity', array(
'class' => 'YourBundle:Command',
'multiple' => yourCondition ? true : false,
));
我从这个 PR 找到了 EasyAdminBundle 的方法,你应该可以使用下面的
// app/config/admin/entities/YourEntity
fields:
- { property: 'commands', multiple: false }
对于一种形式,对于另一种形式将其设置为 false。
或者您可以定义一个参数,例如:
- { property: 'commands', multiple: %condition% }
我有这两个实体 Command
和 Predetermined
,它们是相关的 ManyToMany
:
class Command
{
use IdentifierAutogeneratedTrait;
use TimestampableEntity;
use ActiveTrait;
/**
* @var string
* @ORM\Column(type="string", length=150)
*/
private $name;
/**
* @var string
* @ORM\Column(type="text", nullable=true)
*/
private $description;
/**
* @var Predetermined[]
* @ORM\ManyToMany(targetEntity="Predetermined", mappedBy="commands", cascade={"persist"})
*/
private $predetermined;
...
}
class Predetermined
{
use IdentifierAutogeneratedTrait;
use TimestampableEntity;
use ActiveTrait;
/**
* @var string
* @ORM\Column(type="string", length=160)
* @Assert\NotBlank()
*/
private $smsText;
/**
* @var Command[]
* @ORM\ManyToMany(targetEntity="Command", inversedBy="predetermined", cascade={"persist", "remove"})
* @ORM\JoinTable(name="predetermined_has_command")
*/
private $commands;
...
}
有什么方法可以使用一种形式(这是我在这里看到的唯一一种形式)来改变他们的行为方式?看看下面的图片:
我允许在这里选择许多命令,这就是为什么我使用 ManyToMany
但是 ...
在这一个中我没有,所以我仍然需要使用相同的实体,但在表单级别更改行为。任何人都可以给我一些帮助吗?我该如何实现?
通常在您的 FormBuilder 字段中使用 multiple
属性,例如
$builder->add('commands', 'entity', array(
'class' => 'YourBundle:Command',
'multiple' => yourCondition ? true : false,
));
我从这个 PR 找到了 EasyAdminBundle 的方法,你应该可以使用下面的
// app/config/admin/entities/YourEntity
fields:
- { property: 'commands', multiple: false }
对于一种形式,对于另一种形式将其设置为 false。
或者您可以定义一个参数,例如:
- { property: 'commands', multiple: %condition% }