Выбор, если в Symfony / Twig существует одна строка из сущности - PullRequest
0 голосов
/ 15 мая 2018

Я создаю веб-приложение с использованием Symfony 4.

Приложение имеет (среди прочего) сущность User, сущность Post и сущность PostLike.Пользователь может создать много постов, а пост может иметь много лайков.Так PostLike ссылается на пользователя и пост.Ниже моя сущность PostLike:

<?php

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;
use Gedmo\Mapping\Annotation as Gedmo;

/**
 * @ORM\Entity(repositoryClass="App\Repository\PostLikeRepository")
 */
class PostLike
{
/**
 * @ORM\Id()
 * @ORM\GeneratedValue(strategy="AUTO")
 * @ORM\Column(type="integer")
 */
private $id;

/**
 * @ORM\ManyToOne(targetEntity="App\Entity\User", inversedBy="postLikes")
 * @ORM\JoinColumn(nullable=true)
 */
private $user;

/**
 * @ORM\ManyToOne(targetEntity="App\Entity\Post", inversedBy="postLikes")
 * @ORM\JoinColumn(nullable=true)
 */
private $post;

/**
 * @Gedmo\Timestampable(on="create")
 * @ORM\Column(type="datetime")
 */
private $createdAt;

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

/**
 * @param mixed $id
 */
public function setId($id): void
{
    $this->id = $id;
}

/**
 * @return mixed
 */
public function getUser()
{
    return $this->user;
}

/**
 * @param mixed $user
 */
public function setUser($user): void
{
    $this->user = $user;
}

/**
 * @return mixed
 */
public function getPost()
{
    return $this->post;
}

/**
 * @param mixed $post
 */
public function setPost($post): void
{
    $this->post = $post;
}

public function getCreatedAt()
{
    return $this->createdAt;
}
}

Когда я нахожусь на странице просмотра отдельного поста, как я могу указать, понравился ли этот пост пользователю в TWIG?Это будет "много" сторона отношений, но мне просто нужен один ряд (если он существует), и я не уверен, как это сделать ...

TIA.

Ответы [ 2 ]

0 голосов
/ 15 мая 2018

Если вы хотите просто показать, существует ли Likes, вы можете добавить поле к сущности Post:

public function hasLikes()
{
    return (0 === count($this->likes)) ? false : true;
}

и включите в веточку что-то вроде {% if post.hasLikes %}Liked{% endif %}.

Вы можете сделать что-то похожее со счетчиком и значком, чтобы показать количество лайков.

0 голосов
/ 15 мая 2018

В контроллере вы можете проверить, существует ли такой PostLike с таким пользователем и постом или нет, и передать его в представление:

$liked = false;
$postLike = $this->getDoctrine()->getManager()->getRepository('AppBundle:PostLike')->findOneBy(['user'=>$user->getId(),'post'=>$post->getId()]);
if($postLike !== null){
$liked = true;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...