Symfony. Вывод списка статей с захватом имени автора статьи с помощью один-ко-многим. Как не захватывать весь объект Автора, а только его имя?

Мне надо что бы выводился список статей с захватом имени автора без лишней информации: email, password hash и т.п.

Вот основной контроллер для вывода списка статей на гл. странице:
class MainController extends AbstractController
{
    /**
     * @Route("/", name="main")
     */
    public function index()
    {
        $rep = $this->getDoctrine()->getRepository(Article::class);

        $articles = $rep->findAll();

        return $this->render('main/index.html.twig', [
            'articles' => $articles,
        ]);
    }
}


Сам $articles имеет вид:
Array
(
    [0] => App\Entity\Article Object
        (
            [id:App\Entity\Article:private] => 1
            [title:App\Entity\Article:private] => title
            [text:App\Entity\Article:private] => text
            [author:App\Entity\Article:private] => App\Entity\User Object
                (
                    [id:App\Entity\User:private] => 1
                    [email:App\Entity\User:private] => test@mail.ru
                    [roles:App\Entity\User:private] => Array
                        (
                            [0] => ROLE_ADMIN
                        )

                    [password:App\Entity\User:private] => $argon2id$v=19$m=65536,t=4,p=1$MU5HNEZleHpHZ2lsSHVoUg$lkUQSancg51pbdqDCWSiMd4Newk29/GqDsApt6gx7Cs
                    [first_name:App\Entity\User:private] => Vladimir
                    [last_name:App\Entity\User:private] => Vladimirov
                )

            [img_path:App\Entity\Article:private] => img
            [published_at:App\Entity\Article:private] => DateTime Object
                (
                    [date] => 2019-08-20 10:18:09.000000
                    [timezone_type] => 3
                    [timezone] => Europe/Moscow
                )

        )

)


Можно ли оставить от сущности User только first_name и last_name? Можно ли это сделать в самом контроллере или сущности?

Заранее спасибо :)

Должно быть что то подобное:
Результат

5d5bacca74d98454804646.png
  • Вопрос задан
  • 708 просмотров
Решения вопроса 1
BoShurik
@BoShurik Куратор тега Symfony
Symfony developer
https://www.doctrine-project.org/projects/doctrine...

$query = $em->createQuery(
'SELECT NEW ArticleDTO(ar.title, ar.imagePath, ar.publishedAt, CONCAT(au.firstName, ' ', au.lastName)) 
FROM Article ar JOIN ar.author au');
$articles = $query->getResult(); // array of ArticleDTO


Это можно разместить где-нибудь в репозитории в отдельном методе

Так же может быть интересен Partial Object, но тут рискуете забыть про то, что объект загружен не полностью и получить кучу сложно отлавливаемых багов
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы