Как сделать запросы с несколькими объединениями? - PullRequest
0 голосов
/ 28 января 2019

Я пытаюсь сделать запрос по трем объектам.Вот схема базы данных: https://imgur.com/a/yUYde0C

Стрелка показывает, что это однонаправленное отношение.

$dql = 'SELECT r,m,s 
        FROM Requirement r 
            JOIN r.Manufacturer m 
            JOIN r.Section s 
        WHERE r.id=' . $_SESSION['req_id'];

echo $dql;

$query = $entityManager->createQuery($dql);
$req = $query->getResult();

foreach ($req->getSections() as $section) {

    echo $section->getName() . '<br>';
}

Я просто хочу подключить все разделы к текущему требованию (приведенному вПеременная сеанса 'req_id'.

Не дает никаких результатов.

Спасибо за вашу помощь.:)

РЕДАКТИРОВАТЬ : Вотсообщение об ошибке (извините, не знаю, как мне отформатировать эти сообщения об ошибках):

Fatal error: Uncaught Doctrine\ORM\Query\QueryException: SELECT r,m,s FROM Requirement r JOIN r.Manufacturer m JOIN r.Section s WHERE r.id=1 in ___/vendor/doctrine/orm/lib/Doctrine/ORM/Query/QueryException.php:43 Stack trace: #0 ___/vendor/doctrine/orm/lib/Doctrine/ORM/Query/Parser.php(491): Doctrine\ORM\Query\QueryException::dqlError('SELECT r,m,s FR...') #1 ___/vendor/doctrine/orm/lib/Doctrine/ORM/Query/Parser.php(1060): Doctrine\ORM\Query\Parser->semanticalError('line 0, col 52 ...') #2 ___/vendor/doctrine/orm/lib/Doctrine/ORM/Query/Parser.php(1766): Doctrine\ORM\Query\Parser->JoinAssociationPathExpression() #3 ___/vendor/doctrine/orm/lib/Doctrine/ORM/Query/Parser.php(1700): Doctrine\ORM\Query\Parser->JoinAssociationDeclaration() #4 ___/vendor/doctrine/orm/lib in ___/vendor/doctrine/orm/lib/Doctrine/ORM/Query/QueryException.php on line 65

1 Ответ

0 голосов
/ 29 января 2019

Как говорит @ArthurShveida, объединения должны быть похожи на имя переменной в свойстве, а не на имена классов.

Так что этот DQL-запрос работает:

$dql = 'SELECT r,m,s 
        FROM Requirement r 
             JOIN r.manufacturer m 
             JOIN r.sections s 
        WHERE r.id=' . $_SESSION['req_id'];

Поскольку этоэто класс Requirement:

class Requirement
{
    /**
     * @Id @Column(type="integer") @GeneratedValue
     **/
    protected $id;

    /* some other attributes */

        /**
     * @ManyToOne(targetEntity="Manufacturer")
     * @JoinColumn(name="manufacturer_id", referencedColumnName="id")
     */
    private $manufacturer;

    /**
     * @ManyToMany(targetEntity="Section")
     * @JoinTable(name="Requirement_Section",
     *      joinColumns={@JoinColumn(name="requirement_id", referencedColumnName="id")},
     *      inverseJoinColumns={@JoinColumn(name="section_id", referencedColumnName="id")}
     *      )
     */
    private $sections;

    /* getter/setter functions */

}

Спасибо за помощь!

...