2017-03-22 10 views
0

ArrayCollectionから1要素を取り出したいと考えています。私はSymfony 2.7を使用しています。多対1の関係に基づいて、私はこのArrayCollectionの外の1つの活性を取得したいArrayCollectionから要素を取得する

$activities = $em->getRepository('AppBundle:Activity')->findAll(); 

次に、:

は、たとえば、私は、エンティティアクティビティのコレクションを持っています。

/** 
* @ORM\Entity(repositoryClass="AppBundle\Repository\ActivityRepository") 
* @ORM\Table(name="activity") 
*/ 
class Activity { 

    /** 
    * @ORM\Id 
    * @ORM\Column(type="integer") 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $id; 

    /** 
    * @ORM\ManyToOne(targetEntity="ObjectElementTask", inversedBy="activities", cascade={"persist"}) 
    * @ORM\JoinColumn(name="objectelementtask_id", referencedColumnName="id", onDelete="CASCADE") 
    */ 
    private $objectelementtask; 

は私が何をしようとしました::

実体 '活動'

$objectElementTask = $em->getRepository('AppBundle:ObjectElementTask')->findOneBy(["active" => 1, "object" => (int)$objectId]);  
$activity = $activities->findBy(['objectelementtask' => $objectElementTask]); 

私は次の例外を取得:

"メンバ関数アレイ上findBy()の呼び出しを"

私はデータベースforeachを照会しないようにします。

私も試してみました:

$activity = array_search($objectElementTask, array_column($activities, 'objectelementtask')); 

しかし、これは何の結果を持っていない...事前に

感謝を!

答えて

1

私はここで見ることができるいくつかのことがあります。

1)Doctrineクエリは、ArrayCollectionではない配列を返します。 (https://stackoverflow.com/a/8237943/7745506)。だからあなたがfindByでエラーを出している理由です。場合)http://www.doctrine-project.org/api/common/2.3/source-class-Doctrine.Common.Collections.ArrayCollection.html#377-387

2:これはArrayCollectionのであれば、あなたはフィルタメソッドを使用することができるかもしれない:(http://www.doctrine-project.org/api/common/2.3/class-Doctrine.Common.Collections.ArrayCollection.html。私もここでAPIだのArrayCollectionがfindByメソッドを持っているとは思わないし、私はそれを見ることはありません)アクティビティクラスにはObjectElementTaskクラスとのManyToOne関係が定義されており、ObjectElementTaskによるアクティビティの検索では多くのアクティビティが返される可能性があります。

3)あなたはforeachでDBに問い合わせる必要はなく、あなたはそうする必要はないと言います。

このような状況でできることは、特定のObjectElementTaskのすべてのアクティビティ(上記の2のために複数である可能性があります)のDBを照会することです。

$objectElementTask = $em->getRepository('AppBundle:ObjectElementTask')->findOneBy(["active" => 1, "object" => (int)$objectId]); 

$activities = $em->getRepository('AppBundle:Activity')->findBy(['objectelementtask' => $objectElementTask]); 

これは、ObjectElementTaskをそのオブジェクト要素タスクとして持つすべてのアクティビティを返します。これは配列になるので、それ以降に必要なWHICHアクティビティを把握する必要があります。

関連する問題