我有一個表vote
和comment
我會允許用戶只投一次comment_id
。現在用戶可以多次投票評論。允許用戶只發一次評論[symfony2]
我想之前堅持表中的用戶投票來驗證,如果當前的user_id已經投票指定comment_id
,如果是,投票將不會持續。
Controller.php這樣
public function voteAction($id)
{
$em = $this->getDoctrine()->getEntityManager();
$comment = $em->getRepository('ApplicationSonataUserBundle:Comment')->findOneBy(array('id' => $id));
$entity = new Vote();
$entity->setUser($this->get('security.token_storage')->getToken()->getUser());
$entity->setVotecomment($comment);
$entity->setCreatedAt(new \DateTime());
$em->persist($entity);
$em->flush();
return $this->redirect($this->generateUrl('userShow', array(
'entity' => $entity->getVotecomment()->getRecipient(),
'slug' => $entity->getVotecomment()->getRecipient()->getId(),
)));
}
。
vote.php
<?php
namespace Application\Sonata\UserBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\Collection;
use Symfony\Component\Validator\Constraints as Assert;
use Doctrine\Common\Collections\ArrayCollection;
/**
* @ORM\HasLifecycleCallbacks
* @ORM\Entity
* @ORM\Entity(repositoryClass="Application\Sonata\UserBundle\Entity\UserRepository")
* @ORM\Table(name="vote")
*
*/
class Vote
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @var User
* @ORM\ManyToOne(targetEntity="Application\Sonata\UserBundle\Entity\User", inversedBy="likes")
*/
protected $user;
/**
* @var int
*
* @ORM\ManyToOne(targetEntity="Application\Sonata\UserBundle\Entity\Comment", inversedBy="votes", cascade={"persist"})
* @ORM\JoinColumn(name="votecomment_id", referencedColumnName="id")
*
*/
private $votecomment;
/**
* @ORM\Column(name="createdAt", type="datetime", nullable=false)
*/
protected $createdAt;
public function __construct()
{
$this->setCreatedAt(new \DateTime());
$this->votecomment = new ArrayCollection();
}
}
。
樹枝文件
<a class="fa fa-thumbs-o-up" href="{{ path('likecomment', {'entity': entity ,'slug': entity.recipient.id ,'id': entity.id}) }}"></a><b class="text-color"> {{ entity.votes|length }}</b>
在你voteAction,檢查票已經不存在第一(與FIND) – Farkie