Symfony2, получить элементы из множества отношений в контроллере
У меня есть сущность "Клиенты", имеющая множество отношений с сущностью "Предпочтения", поэтому, конечно же, существует промежуточная таблица 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 ();
Как вы видите, я выбираю одного клиента по его электронной почте и получаю одну строку взамен, потому что электронное письмо уникально, и я могу иметь разные вещи от клиента, такие как его имя, фамилия и т. Д., Выполняя:
$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;
Если у кого-то есть идея, это будет здорово, заранее спасибо.
1 ответ
Предпочтения будут установлены в Doctrine\Common\Collections\ArrayCollection, содержащую экземпляры настроек. Таким образом, вы можете просто зациклить их, как если бы они были массивом.
$preferences = array();
foreach ($result->getPreferences() as $preference) {
$preferences[] = $preference->getName();
}
$preferenceString = implode(' - ',$preferences);
Редактировать: опечатка