Все значения сущности Doctrine равны нулю, кроме id - PullRequest
0 голосов
/ 07 января 2019

Я пытаюсь получить объект из базы данных методом репозитория findOneBy (id).

В основном, линия выглядит так:

public function findAssignedTickets(User $user)
{
    $userId = $user->getId();
    $ticketMapping = new ResultSetMapping;
    $ticketMapping->addEntityResult(Ticket::class, 't');
    $ticketMapping->addFieldResult('t', 'id', 'id');

    // Postgresql Native query, select all tickets where participants array includes the userId
    $query = "SELECT *
    FROM (
        SELECT id, array_agg(e::text::int) arr
        FROM ticket, json_array_elements(participants) e
        GROUP BY 1
        ) s
    WHERE 
        $userId = ANY(arr);
    ";
    $results = $this->getEntityManager()->createNativeQuery($query, $ticketMapping)->getResult();

    $results = array_map(function($item) {
        return $item->getId();
    }, $results); // Transform to array in integers

    dump($results); // array:2 [0 => 83, 1 => 84] -> It's correct

    $tickets = [];

    foreach ($results as $ticketId) {
        dump($this->findOneById($ticketId));
        // $ticket = $this->findOneById($ticketId);
        // $tickets[] = [
        //     'identifier' => $ticket->getIdentifier(),
        //     'title' => $ticket->getTitle(),
        //     'author' => $ticket->getAuthor()->getUsername(),
        //     'status' => $ticket->getStatus(),
        //     'created' => $ticket->getCreatedAt()->format('c'),
        //     'updated' => $ticket->getUpdatedAt()->format('c'),
        // ]; // Ticket formatting to send in json
    }

    return $tickets;
}

, который выдаст: Symfony dump

И я уверен, что полученный идентификатор соответствует строке в базе данных, и что база данных содержит данные, и все поля принадлежат непосредственно сущности, за исключением автора, который представляет собой ManyToOne, и я слышал о ленивом отображении Доктрина, но это не должно происходить в других областях.

Почему я не могу получить данные из Объекта даже с помощью геттеров, и почему для всех значений установлено нулевое значение За исключением для идентификатора?

РЕДАКТИРОВАТЬ: мне было интересно, было ли это связано с ResultSetMapping я использовал для получения идентификаторов билетов в совершенно отдельный запрос ранее, и когда я добавил addFieldResult('t', 'title', 'title');, он сделал работу, но не в других полях, еще одна загадка.

...