2

エンティティ「Preferences」と多数の関係を持つエンティティ「Clients」があるため、もちろん中間テーブル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();

ご覧のように、私は彼の電子メールで 1 人のクライアントを選択し、1 つの行を返します。これは、電子メールが一意であり、クライアントとは異なる名前、姓などを取得できるためです。次のように実行します。

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

誰かがアイデアを持っているなら、それは素晴らしいことです、事前に感謝します.

4

1 に答える 1

1

設定は、設定のインスタンスを含む Doctrine\Common\Collections\ArrayCollection に設定されます。したがって、配列であるかのようにそれらをループすることができます。

$preferences = array();
foreach ($result->getPreferences() as $preference) {
    $preferences[] = $preference->getName();
}
$preferenceString = implode(' - ',$preferences);

編集:タイプミス

于 2015-06-30T10:35:35.410 に答える