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);

Редактировать: опечатка

Другие вопросы по тегам