2017-03-22 40 views
0

我想從ArrayCollection中獲取1個元素。我正在使用Symfony 2.7。從ArrayCollection獲取元素

,比如我有實體活動的集合:

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

接下來,我想送1周的活動了這個ArrayCollection的的基礎上,多到一的關係。

實體 '活動':

/** 
* @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)學說查詢返回的陣列不是一個ArrayCollection。 (https://stackoverflow.com/a/8237943/7745506)。這就是爲什麼你在findBy上遇到錯誤。 (我甚至不認爲ArrayCollection有一個findBy方法,下面是這個API,我沒看到它:http://www.doctrine-project.org/api/common/2.3/class-Doctrine.Common.Collections.ArrayCollection.html)如果這是一個ArrayCollection,你可能可以使用過濾方法:http://www.doctrine-project.org/api/common/2.3/source-class-Doctrine.Common.Collections.ArrayCollection.html#377-387

2)If您的Activity類與ObjectElementTask類具有ManyToOne關係,因此根據定義,任何對ObjectElementTask活動的搜索都有可能返回許多活動。

3)你說你不想查詢數據庫在foreach,你不需要。

你可以在這種情況下做的就是查詢數據庫中的所有活動(它必須是多因上述第2項的潛力)特定ObjectElementTask。

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

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

這將返回擁有所有活動ObjectElementTask作爲他們objectelementtask。之後你必須弄清楚你想要的活動,因爲這將是一個數組。