0

I need to transform a sql request like this one in query builder (or in the worst case in 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)

Here is the MCD and the model

https://i.stack.imgur.com/CVNPR.png

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;
}

And here is the query builder that i've made but which doesn't work :/

$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");

Any ideas ? Thanks :)

Matthiew
  • 627
  • 1
  • 7
  • 9

0 Answers0