Symfony4: Как получить данные из связанной сущности? - PullRequest
0 голосов
/ 23 мая 2019
  • Заказы // Заказы
  • Комментарии // комментарии для каждого заказа

Я хотел бы найти последний комментарий, написанный в этом порядке.

Мой

Контроллер:

 $orders = $this->getDoctrine()->getRepository(Orders::class)->findAll();

  foreach($orders as $order) {  
     $temp = array(
         $order->getId(),
         $order->getComments()->findLatest( $order->getId() ) 

Сущность (Комментарии):

/**
 * @ORM\ManyToOne(targetEntity="App\Entity\Orders", inversedBy="comments")
 */
private $orders;

Entity (Order):

/**
 * @return Collection|Comment[]
 */
public function getComments(): Collection
{
    return $this->comments;
}

Репозиторий комментариев:

public function findLatest($value)
{
    return $this->createQueryBuilder('c')
        ->andWhere('c.orders = :val')
        ->setParameter('val', $value)
        ->orderBy('c.id', 'DESC')
        ->setMaxResults(1)
        ->getQuery()
        ->getResult()
    ;
}

Но похоже, что он не работает таким образом :(

Ошибка:

Attempted to call an undefined method
named "findLatest" of class "Doctrine\ORM\PersistentCollection".

Ответы [ 2 ]

2 голосов
/ 23 мая 2019

Вы можете сделать это, используя класс Doctrine\Common\Collections\Criteria.

Entity (Order):

use Doctrine\Common\Collections\Criteria;

...

  /**
   * Returns the latest comment or false if no comments found under that criteria
   */ 
  public function findLatestComment()
  {
    $criteria = Criteria::create()
      ->orderBy(array("id" => Criteria::DESC))
    ;

    return $this->getComments()->matching($criteria)->first();
  }

И тогда вы можете просто использовать его следующим образом:

$order->findLatestComment();
2 голосов
/ 23 мая 2019

вы пытаетесь вызвать функцию хранилища из другого объекта

попробуйте изменить эту строку:

 $order->getComments()->findLatest( $order->getId() 

с:

 $this->getDoctrine()->getRepository(Comments::class)->findLatest($order->getId);

лучшим решением будет использование массива $ orders-> getComments () во избежание запроса данных из базы данных внутри цикла

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...