Doctrine 2 JOIN ошибка - PullRequest
       19

Doctrine 2 JOIN ошибка

2 голосов
/ 20 января 2012

Я пытаюсь выполнить этот запрос

    $qb = $this->_em->createQueryBuilder();
    $qb->select(array('c', 'ld'))
            ->from('Model\Entity\Company', 'c')
            ->leftJoin('c.legaldetails', 'ld')
            ->where("c.companyid = 1");

    $query = $qb->getQuery();
    echo($query->getSQL());

с этим кодом sql в конце:

SELECT ... FROM Company c0_ LEFT JOIN WHERE c0_.CompanyID = 1

Это мои модели:

<?php    
namespace Model\Entity;

use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;

/**
 * Company
 *
 * @ORM\Table(name="Company")
 * @ORM\Entity(repositoryClass="\Model\Repository\CompanyRepository")
 */
class Company
{
/**
 * @var integer $companyid
 *
 * @ORM\Column(name="CompanyID", type="integer", nullable=false)
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="IDENTITY")
 */
private $companyid;

/**
 * @var \Model\Entity\LegalDetails $legaldetails
 *
 * @ORM\OneToOne(targetEntity="\Model\Entity\Legaldetails", mappedBy="companyid")
 */
private $legaldetails;

//other fields

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

//setters and getters

и юридическое лицо юридического лица:

<?php
namespace Model\Entity;

use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;

/**
 * Legaldetails
 *
 * @ORM\Table(name="LegalDetails")
 * @ORM\Entity
 */
class Legaldetails
{
/**
 * @var integer $legalid
 *
 * @ORM\Column(name="LegalID", type="integer", nullable=false)
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="IDENTITY")
 */
private $legalid;

/**
 * @var \Model\Entity\Company $company
 *
 * @ORM\Column(name="CompanyID", type="integer", nullable=false)
 * @ORM\OneToOne(targetEntity="\Model\Entity\Company", inversedBy="companyid")
 * @ORM\JoinColumn(name="companyid", referencedColumnName="companyid")
 */
private $company;

Что не так?

П.С .: Я понимаю, что иметь два поля с одинаковыми именами (companyid) - плохая практика, но это не моя вина

1 Ответ

2 голосов
/ 20 января 2012

Судя по оператору SQL, JOIN ON что ? Вы пропустили ключевую часть оператора соединения. Может быть, ON table.companyid=table2.companyid? Использование одинаковых имен в таблицах может быть даже полезным, и это обычная практика, а не плохая практика. Вы можете поместить здесь полный оператор SQL, , который будет лучшей практикой. : -)

...