0

私は SF2.0.15 で Doctrine2 を使用しており、2 つのエンティティを持っています。

-遠征 - ステップ

説明すると、1 つの探索に複数のステップが含まれる場合があり、1 つのステップが複数の探索に属する場合があります。さらに、1 つの遠征は彼の創設者 (「所有者」と名付けられ、User エンティティに格納されます) に属します。そこで、Expedition テーブルと Steps テーブルの間で ManyToMany 結合を作成することにしました。あなたの意見では、それは良い選択ですか、それとも間違った選択ですか?

1 つの遠征に属するすべてのステップを選択するメソッドを作成したいと考えています($id_exp に含まれる遠征の ID を持っています)。だから、私はインターネットでたくさんのトピックを読みましたが、いつも失敗し、その理由を知りたいです...

エンティティ Expedition.php

/**
 * @ORM\ManyToOne(targetEntity="Easymuth\UserBundle\Entity\User")
 * @ORM\JoinColumn(nullable=false)
 */
private $owner;
/**
 * @ORM\ManyToMany(targetEntity="Easymuth\ExpeditionBundle\Entity\Step", cascade={"persist"})
 */
private $steps;

/**
 * Add steps
 *
 * @param Easymuth\ExpeditionBundle\Entity\Step $steps
 */
public function addStep(\Easymuth\ExpeditionBundle\Entity\Step $step)
{
    $this->steps[] = $step;
}

public function __construct()
{
    $this->steps = new \Doctrine\Common\Collections\ArrayCollection();
}
/**
 * Get steps
 *
 * @return Doctrine\Common\Collections\Collection 
 */
public function getSteps()
{
    return $this->steps;
}

ExpeditionRepository.php :

namespace Easymuth\ExpeditionBundle\Entity;

use Doctrine\ORM\EntityRepository;

class ExpeditionRepository extends EntityRepository
{
public function getStepsFromExpedition($id_exp) {
  $qb = $this->createQueryBuilder('e')
             ->leftJoin('e.steps', 's')
             ->addSelect('s')
             ->where('e.id = :id')
             ->setParameter('id', $id_exp);

  return $qb->getQuery()->getResult();
}
}

そして最後に、コントローラーには次のものがあります。

namespace Easymuth\ExpeditionBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Easymuth\ExpeditionBundle\Entity\Expedition;

class MainController extends Controller
{
public function stepsAction($id_exp) {

    $expedition = $this->getDoctrine()
                    ->getEntityManager()
                    ->getRepository('EasymuthExpeditionBundle:Expedition')
                    ->getStepsFromExpedition($id_exp);

    print_r($expedition->getSteps()); // it displays a very long contents........

    //return $this->render('EasymuthExpeditionBundle:Main:steps.html.twig'));
   }
}

print_r (または var_dump) に表示されるエラーは次のとおりです。

Fatal error: Call to a member function getSteps() on a non-object in /Applications/MAMP/htdocs/easymuth/src/Easymuth/ExpeditionBundle/Controller/MainController.php

ご助力ありがとうございます !

4

1 に答える 1