Doctrine createQueryBuilder возвращает неожиданные результаты - PullRequest
0 голосов
/ 31 января 2019

У меня есть следующие объекты:

Автомобиль - справочная таблица, в которой хранятся связи между следующими объектами. Создайте подмодель модели

Теперь на основе "года" и "марки" транспортного средства.Я пытаюсь вернуть доступные подмодели или ничего не вернуть, если они недоступны для данного автомобиля.В моем примере $ make = 'Mazda' и $ year = '2016'

По какой-то причине следующий запрос возвращает подмодели, принадлежащие Kia: D, когда он не должен их возвращать.Что я делаю не так?

        $qb = $this->createQueryBuilder('submodel');
        $qb->select('submodel', 'vehicles')
        ->join('submodel.vehicles', 'vehicles')
        ->join('vehicles.make', 'make')
        ->Where('make.makeName = :makeName')->setParameter('makeName', $makeName)
        ->AndWhere('vehicles.year = :year')->setParameter('year', $year);
        $results = $qb->getQuery()->getResult();

Сущность транспортного средства:

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

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="create_time", type="datetime")
     */
    protected $createTime;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="update_time", type="datetime")
     */
    protected $updateTime;

    /**
     * @var integer
     *
     * @ORM\Column(name="year", type="integer", length=4)
     */
    private $year;

    /**
     * @ORM\ManyToOne(targetEntity="PhilipsMake", inversedBy="vehicles")
     * @ORM\JoinColumn(name="make_id", referencedColumnName="id")
     */
    private $make;


    /**
     * @ORM\ManyToOne(targetEntity="PhilipsModel", inversedBy="vehicles")
     * @ORM\JoinColumn(name="model_id", referencedColumnName="id")
     */
    private $model;

    /**
     * @ORM\ManyToOne(targetEntity="PhilipsSubmodel", inversedBy="vehicles")
     * @ORM\JoinColumn(name="submodel_id", referencedColumnName="id")
     */
    private $submodel;

    /**
     * @ORM\ManyToOne(targetEntity="PhilipsBodytype")
     * @ORM\JoinColumn(name="bodytype_id", referencedColumnName="id")
     */
    private $bodytype;

    /**
     * @ORM\ManyToOne(targetEntity="PhilipsNumberOfDoors")
     * @ORM\JoinColumn(name="number_of_doors_id", referencedColumnName="id")
     */
    private $numberOfDoors;

    /**
     * @ORM\ManyToOne(targetEntity="PhilipsQualifier")
     * @ORM\JoinColumn(name="qualifier", referencedColumnName="id")
     */
    private $qualifier;

    /**
     * @ORM\ManyToMany(targetEntity="PhilipsLight", mappedBy="vehicles")
     */

    private $lights;

Субмодельная сущность:

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

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="create_time", type="datetime")
     */
    protected $createTime;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="update_time", type="datetime")
     */
    protected $updateTime;


    /**
     * @var string
     *
     * @ORM\Column(name="submodel_name", type="string", length=100, nullable=true, unique=true)
     */

    private $submodelName;

    /**
     * @ORM\OneToMany(targetEntity="PhilipsVehicle", mappedBy="make", orphanRemoval=true,  cascade={"persist"})
     */
    protected $vehicles;
...