0

私は Doctrine ORM クエリ エラーで立ち往生しています。非常に単純な修正だと確信していますが、まだ symfony2 のすべてを理解していません :) 何時間も検索しましたが、自分で解決策を見つけることができません。

Notice: Undefined index: id_chapter in C:\xampp\htdocs\vendor\doctrine\orm\lib
\Doctrine\ORM\Internal\Hydration\ObjectHydrator.php on line 93

Notice: Undefined index: id_book in C:\xampp\htdocs\vendor\doctrine\orm\lib
\Doctrine\ORM\Internal\Hydration\ObjectHydrator.php on line 93

Notice: Undefined index: id_testament in C:\xampp\htdocs\vendor\doctrine\orm\lib
\Doctrine\ORM\Internal\Hydration\ObjectHydrator.php on line 93

Notice: Undefined index: id in C:\xampp\htdocs\vendor\doctrine\orm\lib\
Doctrine\ORM\UnitOfWork.php on line 2433

Notice: Undefined index: id_chapter in C:\xampp\htdocs\vendor\doctrine\orm\lib\
Doctrine\ORM\Internal\Hydration\ObjectHydrator.php on line 366

Notice: Undefined index: id_chapter in C:\xampp\htdocs\vendor\doctrine\orm\lib
\Doctrine\ORM\Internal\Hydration\ObjectHydrator.php on line 367

Fatal error: Call to a member function getValue() on a non-object in C:\xampp\
htdocs\vendor\doctrine\orm\lib\Doctrine\ORM\Internal\Hydration\ObjectHydrator
.php on line 371

これらの通知は、私のエンティティ ビルドの一部である、私のマッピング ミスに言及しているようです。

/**
 * @ORM\ManyToOne(targetEntity="testament", inversedBy="books")
 * @ORM\JoinColumn(name="id_testament", referencedColumnName="id_testament")
 */
 protected $testament;

必要に応じて詳細を尋ねてください。どんな助けでも大歓迎です! どうも。

編集:このコードを追加すると便利かもしれません

$em = $this->getDoctrine()->getManager();
        $rsm = new ResultSetMappingBuilder($em);
        $rsm->addRootEntityFromClassMetadata('dieuenligne\websiteBundle\Entity\line', 'l');
        $rsm->addJoinedEntityFromClassMetadata('dieuenligne\websiteBundle\Entity\livreChapitre', 'c', 'l', 'id_chapter', array('id_chapter' => 'idc'));
        $rsm->addJoinedEntityFromClassMetadata('dieuenligne\websiteBundle\Entity\book', 'b', 'c', 'id_book', array('id_book' => 'idb'));
        $rsm->addJoinedEntityFromClassMetadata('dieuenligne\websiteBundle\Entity\testament', 't', 'b', 'id_testament', array('id_testament' => 'idt'));

        $sql = 'SELECT t.id_testament, b.book_number, c.chapter_wording, l.line_number, l.line_content FROM line l INNER JOIN chapter c ON l.id_chapter = c.id_chapter 
                    INNER JOIN book b ON c.id_book = b.id_book 
                    INNER JOIN testament t ON b.id_testament = t.id_testament 
                    WHERE MATCH (line_content) AGAINST (:request) LIMIT 0,75';

        $query = $em->createNativeQuery($sql, $rsm);
        $query->setParameter('request', $request);

        $lines = $query->getResult();

これは私の新しいコードで、id 競合の問題に取り組んでいます:

$em = $this->getDoctrine()->getManager();
        $rsm = new ResultSetMappingBuilder($em);
        $rsm->addRootEntityFromClassMetadata('dieuenligne\websiteBundle\Entity\line', 'l', array('id' => 'lid'));
        $rsm->addJoinedEntityFromClassMetadata('dieuenligne\websiteBundle\Entity\livreChapitre', 'c', 'l', 'id_chapter', array('id_chapter' => 'idc'));
        $rsm->addJoinedEntityFromClassMetadata('dieuenligne\websiteBundle\Entity\book', 'b', 'c', 'id_book', array('id_book' => 'idb'));
        $rsm->addJoinedEntityFromClassMetadata('dieuenligne\websiteBundle\Entity\testament', 't', 'b', 'id_testament', array('id_testament' => 'idt'));

$sql = 'SELECT t.id, b.book_number, c.chapter_wording, l.line_number, l.line_content FROM line l INNER JOIN chapter c ON l.id_chapter = c.id 
                    INNER JOIN book b ON c.id_book = b.id 
                    INNER JOIN testament t ON b.id_testament = t.id 
                    WHERE MATCH (line_content) AGAINST (:request) LIMIT 0,75';

これが私の遺言エンティティの一部です。

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

/**
 * @var integer
 *
 * @ORM\Column(name="id_bible", type="integer").
 */
private $idBible;

/**
 * @var string
 *
 * @ORM\Column(name="testament_wording", type="string", length=20)
 */
private $testamentWording;

/**
 * @ORM\ManyToOne(targetEntity="bible", inversedBy="testaments")
 * @ORM\JoinColumn(name="id_bible", referencedColumnName="id")
 */
protected $bible;

/**
 * @ORM\OneToMany(targetEntity="book", mappedBy="testament")
 * @ORM\OrderBy({"bookNumber" = "ASC"})
 */
protected $books;

public function __construct()
{
    $this->books = new ArrayCollection();
}

これは私のエラーです:

The column 'id' conflicts with another column in the mapper. 

at ResultSetMappingBuilder ->addAllClassFields ('dieuenligne\websiteBundle\Entity\book', 'b', array('id_book' => 'idb'))
in C:\xampp\htdocs\vendor\doctrine\orm\lib\Doctrine\ORM\Query\ResultSetMappingBuilder.php at line 71  +
at ResultSetMappingBuilder ->addJoinedEntityFromClassMetadata ('dieuenligne\websiteBundle\Entity\book', 'b', 'c', 'id_book', array('id_book' => 'idb'))
in C:\xampp\htdocs\src\dieuenligne\websiteBundle\Controller\WebsiteController.php at line 112  +

私はそれに取り組んでおり、解決したら更新します。以前にこのエラーが発生し、 に を追加し array('id_chapter' => 'idc')ましたがaddJoinedEntityFromClassMetadata、ここでは解決策ではないようです。

ドキュメントで解決策が見つかりませんでした。私はほとんどの規則を尊重しましたが、まだ id の問題があります (そのようです)。

コードのより大きな部分を表示する必要がありますか?

編集

まだこれにこだわっていますが、ここにコードがありますResultSetMappingBuilder.php at line 71

public function addJoinedEntityFromClassMetadata($class, $alias, $parentAlias, $relation, $renamedColumns = array())
{
    $this->addJoinedEntityResult($class, $alias, $parentAlias, $relation);
    $this->addAllClassFields($class, $alias, $renamedColumns);
}

ライン 71 は上にありaddAllClassFieldsます。私にとって、クラス、エイリアス、および renamedColumns は問題なく、namedColumns 属性 ( array('id_book' => 'idb')) を使用しているため、ID の競合は発生しません...

これについてのアドバイスを事前に感謝します。これは symfony の私の最初のプロジェクトであり、Web 開発の初心者であるため、これについて本当に助けが必要です! :)

4

1 に答える 1