0

多対一の単方向関係を持つ 2 つの単純なテーブルがあります。

class Event extends BaseEvent
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;


    /**
     *
     * @ORM\ManyToOne(targetEntity="Rposition")
     * @ORM\JoinColumn(name="owner", referencedColumnName="id",onDelete="CASCADE", nullable=false  )
     **/
    private $owner; 
....

そして所有者フィールド クラスの起源:

   class Rposition
{

    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="string", length=36)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="UUID")
     */
    private $id;


    /**
     *
     *
     * @ORM\Column(name="scenario", type="string", length=255, nullable=false)
     */ 
    private $scenario;

正しい getter/setter と __tostring() を持つ両方のクラス

次のようなクエリを実装する必要があります。

public function findAllByScenario($scenario) {
        $q = $this->getEntityManager()->createQuery("SELECT e , r.scenario , r.id
                                   FROM LapoMymeBundle:Event e
                                   JOIN LapoMymeBundle:Rposition r
                                   WITH  e.owner = r.id
                                   WHERE r.scenario = :scenario
                                   ORDER BY e.start ASC, e.end ASC
                                   ")->setParameter('scenario', $scenario);
        try {

            return $q->getResult();
        } catch (\Doctrine\ORM\NoResultException $e) {
            return null;
        }

    }

-結合を作成し、その結果を送り返すのは正しい方法ですか?

-オブジェクトの配列からフィールドを取得する正しい方法は何ですか?

そのようなものは次のとおりです。

 $events=$this->getDoctrine()->getManager()
        ->getRepository('LapoMymeBundle:Event')->findAllByScenario($scenario);

    $outputUsersArray = Array();
    foreach($events as $event)
    {
        $eventArray = Array();        

        $eventArray[JSONResponseFields::KEY_ID] = $event->getId();
        $eventArray[JSONResponseFields::KEY_NAME] = $event->getOwner()->getId();

        $outputEventsArray[] = $eventArray;
    } ....

次のようなエラーが発生します。

FatalErrorException: Error: Call to a member function getId() on a non-object in.....
4

1 に答える 1

0

Doctrine Query builder を使用してこれを機能させることができます。Querybuilder インスタンスがあると仮定します。クエリは次のようになります

$qb = this->getDoctrine()->getRepository('BundleName:Event')->createQueryBuilder('e');

$query = $qb
    ->select('e','p')
    ->innerjoin('u.owner','r')
    ->where('r.scenario= :scenario')
    ->setParameter('scenario', $scenarioid)
    ->getQuery();

$chatuser = $query->getResult();
于 2013-11-21T05:43:51.427 に答える