0

我需要在查询生成器中转换一个像这样的 sql 请求(或者在最坏的情况下在 dql 中)

UPDATE code c, element_code ec
SET c.url = 'test' 
WHERE c.element_code_id = ec.id
AND ec.project_id = 5
AND (c.id = 1 OR c.id = 2)

这是MCD和模型

http://i.imgur.com/TvKhbGR.png?1

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

/**
 * @var string $url
 *
 * @ORM\Column(name="url", type="string", length=255, nullable=true)
 */
protected $url;

/**
 * @ORM\OneToOne(targetEntity="CodeBundle\Entity\ElementCode", inversedBy="code")
 * @ORM\JoinColumn(name="element_code_id", referencedColumnName="id")
 */
protected $elementCode;
}

=========

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

/**
 * @ORM\ManyToOne(targetEntity="CodeBundle\Entity\Project", inversedBy="elementsCode")
 * @ORM\JoinColumn(name="project_id", referencedColumnName="id")
 */
protected $project;

/**
 * @ORM\OneToOne(targetEntity="CodeBundle\Entity\Code", mappedBy="elementCode")
 */
protected $code;
}

=========

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

/**
 * @ORM\OneToMany(targetEntity="CodeBundle\Entity\ElementArbo", mappedBy="project")
 */
protected $elementsCode;
}

这是我制作的查询生成器,但它不起作用:/

$qb = $this->_em->createQueryBuilder();
$q = $qb->update('CodeBundle:Code', 'c')
        ->innerJoin('CodeBundle:ElementCode', 'ec')

        ->set('c.url', ':url')
        ->setParameter('url', 'test')

        ->where('c.elementCode = ec.id')
        ->andWhere('ec.project = :project')
        ->setParameter('project', $project)
        ->andWhere("c.id = 1")
        ->orWhere("c.id = 2");

有任何想法吗 ?谢谢 :)

4

0 回答 0