Symfony2,从控制器中的多对多关系中获取元素
Symfony2, get elements from manytomany relation in controller
我有一个实体 "Clients" 与一个实体 "Preferences" 有关系 manytomany,所以当然有一个中间 table clients_preferences。
这种关系很好,对于一个客户,我可以在 TWIG 中显示它的所有偏好,比如
{% if not client.preferences.empty %}
<p>
{% for preference in client.preferences %}
{{ preference.name }}{% if not loop.last %}, {% endif %}
{% endfor %}
</p>
{% endif %}
但是:
我希望能够在我的控制器中获取首选项列表
像
$preferences = $preference1." - ".$preference2......;
(这是因为我需要在通过JSON之后发送这个列表...)
因此,我创建了一个查询来获取我的客户行:
$query = $em->createQuery('SELECT c FROM SamplemyBundle:Clients c WHERE c.email = ?1')
->setParameter(1, $email);
$result = $query->getSingleResult();
如你所见,我 select 一个客户的电子邮件,我在 return 中得到一行,因为电子邮件是唯一的,我可以从客户那里得到不同的东西,比如他的名字,姓氏等...通过做:
$firstname = $result->getFirstname();
一切都很好,问题是我不知道如何处理控制器中的首选项列表。
我想我必须做一个循环....
在我的实体客户下方
class Clients
{
/**
* @ORM\ManyToMany(targetEntity="Sample\myBundle\Entity\Preferences", cascade={"persist"})
*/
private $preferences;
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="firstname", type="string", length=255)
*/
private $firstname;
还有我的实体首选项
class Preferences
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="name", type="string", length=255)
*/
private $name;
如果有人有想法,那就太好了,提前谢谢你。
首选项将设置为包含首选项实例的 Doctrine\Common\Collections\ArrayCollection。所以你可以把它们当作一个数组来循环。
$preferences = array();
foreach ($result->getPreferences() as $preference) {
$preferences[] = $preference->getName();
}
$preferenceString = implode(' - ',$preferences);
编辑:打字错误
我有一个实体 "Clients" 与一个实体 "Preferences" 有关系 manytomany,所以当然有一个中间 table clients_preferences。
这种关系很好,对于一个客户,我可以在 TWIG 中显示它的所有偏好,比如
{% if not client.preferences.empty %}
<p>
{% for preference in client.preferences %}
{{ preference.name }}{% if not loop.last %}, {% endif %}
{% endfor %}
</p>
{% endif %}
但是:
我希望能够在我的控制器中获取首选项列表 像
$preferences = $preference1." - ".$preference2......;
(这是因为我需要在通过JSON之后发送这个列表...)
因此,我创建了一个查询来获取我的客户行:
$query = $em->createQuery('SELECT c FROM SamplemyBundle:Clients c WHERE c.email = ?1')
->setParameter(1, $email);
$result = $query->getSingleResult();
如你所见,我 select 一个客户的电子邮件,我在 return 中得到一行,因为电子邮件是唯一的,我可以从客户那里得到不同的东西,比如他的名字,姓氏等...通过做:
$firstname = $result->getFirstname();
一切都很好,问题是我不知道如何处理控制器中的首选项列表。 我想我必须做一个循环....
在我的实体客户下方
class Clients
{
/**
* @ORM\ManyToMany(targetEntity="Sample\myBundle\Entity\Preferences", cascade={"persist"})
*/
private $preferences;
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="firstname", type="string", length=255)
*/
private $firstname;
还有我的实体首选项
class Preferences
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="name", type="string", length=255)
*/
private $name;
如果有人有想法,那就太好了,提前谢谢你。
首选项将设置为包含首选项实例的 Doctrine\Common\Collections\ArrayCollection。所以你可以把它们当作一个数组来循环。
$preferences = array();
foreach ($result->getPreferences() as $preference) {
$preferences[] = $preference->getName();
}
$preferenceString = implode(' - ',$preferences);
编辑:打字错误