【问题标题】:Error on update query symfony2更新查询 symfony2 出错
【发布时间】:2014-06-21 17:02:07
【问题描述】:

我为正在工作的实体 Evenement(event) 生成了 CRUD。但是现在我想在每次添加 Evenement 时更新另一个名为 notification 的实体中的字段。每个晚上都有一个类别

Evenement.php:

<?php

namespace Mql14\mqlmeBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;


/**
 * Mql14\mqlmeBundle\Entity\Evenement
 *
 * @ORM\Table(name="evenement")
 * @ORM\Entity
 */
class Evenement
{
    /**
     * @var integer $id
     *
     * @ORM\Column(name="id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * @var string $nom
     *
     * @ORM\Column(name="nom", type="string", length=45, nullable=true)
     */
    private $nom;

    /**
     * @var datetime $date
     *
     * @ORM\Column(name="date", type="datetime", nullable=true)
     */
    private $date;

    /**
     * @var string $description
     *
     * @ORM\Column(name="description", type="string", length=400, nullable=true)
     */
    private $description;

    /**
     * @var integer $ticket
     *
     * @ORM\Column(name="Ticket", type="integer", nullable=true)
     */
    private $ticket;

    /**
     * @var User
     *
     * @ORM\ManyToMany(targetEntity="User", mappedBy="evenement")
     */
    private $user;

    /**
     * @var Categorie
     *
     * @ORM\ManyToOne(targetEntity="Categorie", inversedBy="evenement")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="categorie_id", referencedColumnName="id")
     * })
     */
    private $categorie;

    /**
     * @var Lieu
     *
     * @ORM\ManyToOne(targetEntity="Lieu")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="lieu_id", referencedColumnName="id")
     * })
     */
    private $lieu;

   public function __construct()
    {
        $this->user = new \Doctrine\Common\Collections\ArrayCollection();
    }


    /**
     * Get id
     *
     * @return integer 
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set nom
     *
     * @param string $nom
     */
    public function setNom($nom)
    {
        $this->nom = $nom;
    }

    /**
     * Get nom
     *
     * @return string 
     */
    public function getNom()
    {
        return $this->nom;
    }

    /**
     * Set date
     *
     * @param datetime $date
     */
    public function setDate($date)
    {
        $this->date = $date;
    }

    /**
     * Get date
     *
     * @return datetime 
     */
    public function getDate()
    {
        return $this->date;
    }

    /**
     * Set description
     *
     * @param string $description
     */
    public function setDescription($description)
    {
        $this->description = $description;
    }

    /**
     * Get description
     *
     * @return string 
     */
    public function getDescription()
    {
        return $this->description;
    }

    /**
     * Set ticket
     *
     * @param integer $ticket
     */
    public function setTicket($ticket)
    {
        $this->ticket = $ticket;
    }

    /**
     * Get ticket
     *
     * @return integer 
     */
    public function getTicket()
    {
        return $this->ticket;
    }

    /**
     * Add user
     *
     * @param Mql14\mqlmeBundle\Entity\User $user
     */
    public function addUser(\Mql14\mqlmeBundle\Entity\User $user)
    {
        $this->user[] = $user;
    }

    /**
     * Get user
     *
     * @return Doctrine\Common\Collections\Collection 
     */
    public function getUser()
    {
        return $this->user;
    }

    /**
     * Set categorie
     *
     * @param Mql14\mqlmeBundle\Entity\Categorie $categorie
     */
    public function setCategorie(\Mql14\mqlmeBundle\Entity\Categorie $categorie)
    {
        $this->categorie = $categorie;
    }

    /**
     * Get categorie
     *
     * @return Mql14\mqlmeBundle\Entity\Categorie 
     */
    public function getCategorie()
    {
        return $this->categorie;
    }

    /**
     * Set lieu
     *
     * @param Mql14\mqlmeBundle\Entity\Lieu $lieu
     */
    public function setLieu(\Mql14\mqlmeBundle\Entity\Lieu $lieu)
    {
        $this->lieu = $lieu;
    }

    /**
     * Get lieu
     *
     * @return Mql14\mqlmeBundle\Entity\Lieu 
     */
    public function getLieu()
    {
        return $this->lieu;
    }




    public function getCategorieId(\Mql14\mqlmeBundle\Entity\Categorie $categorie)
    {
        $idc= $categorie->getId();
        return $idc;
}

}

类别.php:

<?php

namespace Mql14\mqlmeBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * Mql14\mqlmeBundle\Entity\Categorie
 *
 * @ORM\Table(name="categorie")
 * @ORM\Entity
 */
class Categorie
{
    /**
     * @var integer $id
     *
     * @ORM\Column(name="id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * @var string $nomcat
     *
     * @ORM\Column(name="nomCat", type="string", length=45, nullable=true)
     */
    private $nomcat;

    /**
     * @var string $photo
     *
     * @ORM\Column(name="photo", type="string", length=45, nullable=true)
     */
    private $photo;

    /**
     * @var $evenement
     *
     * @ORM\OneToMany(targetEntity="Evenement", mappedBy="categorie")
     */
     private $evenement;

    /**
     * @var User
     *
     * @ORM\ManyToMany(targetEntity="User", mappedBy="categorie")
     */
    private $user;

    public function __construct()
    {
        $this->user = new \Doctrine\Common\Collections\ArrayCollection();
    }


    /**
     * Get id
     *
     * @return integer 
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set nomcat
     *
     * @param string $nomcat
     */
    public function setNomcat($nomcat)
    {
        $this->nomcat = $nomcat;
    }

    /**
     * Get nomcat
     *
     * @return string 
     */
    public function getNomcat()
    {
        return $this->nomcat;
    }

    /**
     * Set photo
     *
     * @param string $photo
     */
    public function setPhoto($photo)
    {
        $this->photo = $photo;
    }

    /**
     * Get photo
     *
     * @return string 
     */
    public function getPhoto()
    {
        return $this->photo;
    }

    /**
     * Add user
     *
     * @param Mql14\mqlmeBundle\Entity\User $user
     */
    public function addUser(\Mql14\mqlmeBundle\Entity\User $user)
    {
        $this->user[] = $user;
    }

    /**
     * Get user
     *
     * @return Doctrine\Common\Collections\Collection 
     */
    public function getUser()
    {
        return $this->user;
    }

    /**
     * Add evenement
     *
     * @param Mql14\mqlmeBundle\Entity\Categorie $evenement
     */
    public function addEvenement(\Mql14\mqlmeBundle\Entity\Evenement $evenement)
    {
        $this->evenement[] = $evenement;
    }

    /**
     * Get evenement
     *
     * @return Doctrine\Common\Collections\Collection 
     */
    public function getEvenement()
    {
        return $this->evenement;
    }
}

Notification.php:

<?php

namespace Mql14\mqlmeBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * Mql14\mqlmeBundle\Entity\Notification
 *
 * @ORM\Table(name="notification")
 * @ORM\Entity
 */
class Notification
{
    /**
     * @var integer $id
     *
     * @ORM\Column(name="id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * @var string $etat
     *
     * @ORM\Column(name="etat", type="integer", nullable=true)
     */
    private $etat;

    /**
     * @var User
     *
     * @ORM\ManyToOne(targetEntity="User")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="User_id", referencedColumnName="id")
     *
     * })
     */
    private $user;

    /**
     * @var Categorie
     *
     * @ORM\ManyToOne(targetEntity="Categorie")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="Categorie_id", referencedColumnName="id")
     *
     * })
     */
    private $categorie;



    /**
     * Get id
     *
     * @return integer 
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set etat
     *
     * @param string $etat
     */
    public function setEtat($etat)
    {
        $this->etat = $etat;
    }

    /**
     * Get etat
     *
     * @return string 
     */
    public function getEtat()
    {
        return $this->etat;
    }

    /**
     * Set user
     *
     * @param Mql14\mqlmeBundle\Entity\User $user
     */
    public function setUser(\Mql14\mqlmeBundle\Entity\User $user)
    {
        $this->user = $user;
    }

    /**
     * Get user
     *
     * @return Mql14\mqlmeBundle\Entity\User 
     */
    public function getUser()
    {
        return $this->user;
    }

    /**
     * Set categorie
     *
     * @param Mql14\mqlmeBundle\Entity\Categorie $categorie
     */
    public function setCategorie(\Mql14\mqlmeBundle\Entity\Categorie $categorie)
    {
        $this->categorie = $categorie;
    }

    /**
     * Get categorie
     *
     * @return Mql14\mqlmeBundle\Entity\Categorie 
     */
    public function getCategorie()
    {
        return $this->categorie;
    }
}

在为 Evenement 实体执行 CRUD 后生成的 createAction 中,我添加了更新查询:

public function createAction(Request $request)
{
    $entity  = new Evenement();
    $request = $this->getRequest();
    $form    = $this->createForm(new EvenementType(), $entity);
    $form->bindRequest($request);
    $entity->upload();
  $cat=$entity->getCategorie();


if ($cat) {
    $catn = $cat->getNomCat();


$query = $this->container->get('doctrine')->getEntityManager()->createQuery( 'UPDATE Mql14mqlmeBundle:Notification n SET n.etat=1  WHERE n.categorie LIKE :catn  ' );
          $query->setParameter('categorie', $catn);
            $query->execute();

  }
if ($form->isValid()) {
    $em = $this->getDoctrine()->getEntityManager();
    $em->persist($entity);
    $em->flush();

    return $this->redirect($this->generateUrl('mql14mqlme_adminshow', array('id' => $entity->getId())));

}

return array(
    'entity' => $entity,
    'form'   => $form->createView(),            
);

}

我得到的错误是:

[语义错误] 第 0 行,第 61 列,靠近“类别 LIKE”:错误: 无效的路径表达式。必须是 StateFieldPathExpression。

【问题讨论】:

    标签: symfony doctrine dql


    【解决方案1】:

    您在更新查询中设置了错误的参数。

    在这一行:

    $query = $this->container->get('doctrine')->getEntityManager()->createQuery(
             'UPDATE Mql14mqlmeBundle:Notification n SET n.etat=1
             WHERE n.categorie LIKE :catn' );
          $query->setParameter('categorie', $catn);
            $query->execute();
    

    应该是:

    $query = $this->container->get('doctrine')->getEntityManager()->createQuery(
             'UPDATE Mql14mqlmeBundle:Notification n SET n.etat=1
             WHERE n.categorie LIKE :catn' );
          $query->setParameter('catn', $catn);
            $query->execute();
    

    【讨论】:

    • 哎呀我没看到,但我更正了它,它仍然给我同样的错误
    • 我想在我的数据库中添加它(因为我从数据库中生成了实体)在表符号中我有列“Categorie_id”代表类别的 id,所以我不不知道数据库的列是否在 dql 中,或者我们只是对实体进行查询。
    【解决方案2】:

    n.categorie 是一个实体(Mql14\mqlmeBundle\Entity\Categorie 类型),您无法使用 LIKE 比较实体。

    尝试将LIKE 替换为=

    改变

    UPDATE Mql14mqlmeBundle:Notification n SET n.etat=1 WHERE n.categorie LIKE :catn
    

    UPDATE Mql14mqlmeBundle:Notification n SET n.etat=1 WHERE n.categorie = :catn
    

    【讨论】:

    • FuzzyTree 我尝试了你的解决方案,但更新没有发生,而是我使用了原始 sql 查询,现在它对我有用。$count = $conn->executeUpdate("UPDATE Notification SET etat = 1 其中Categorie_id=$catn");
    • 如果 $catn 是 id 而不是实体,请尝试 WHERE IDENTITY(n.categorie) = :catn
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-27
    • 1970-01-01
    • 1970-01-01
    • 2016-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多