私はテーブルがありますvote
とcomment
私はcomment_id
のために1回だけ投票することを許可します。今のところ、ユーザーはコメントのために複数回投票することができます。コメントに1回だけ投票できるようにする[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>
、投票は既に(検索して)最初に存在していないことを確認 – Farkie