Как я могу вывести данные ManyToOne с доктриной (Symfony 4)? - PullRequest
0 голосов
/ 13 марта 2019

Это моя сущность "данные":

<?php

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;

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

  /**
  * @ORM\Column(type="string", length=10, unique=true)
  */
  private $uuid;



  /**
  * @ORM\Column(type="string", length=255)
  */
  private $content;



  /**
   * @ORM\ManyToOne(targetEntity="Fields")
   * @ORM\JoinColumn(name="field", referencedColumnName="id")
   */

  private $fields;



  public function getId(): ?int
  {
    return $this->id;
  }



  public function getContent()
  {
    return $this->content;
  }

  public function setContent($content)
  {
    $this->content = $content;
  }




  public function getUuid(): ?string
  {
    return $this->uuid;
  }

  public function setUuid(string $uuid): self
  {
    $this->uuid = $uuid;

    return $this;
  }


  public function getFields(): ?Fields
  {
    return $this->fields;
  }

  public function setFields(?Fields $fields): self
  {
    $this->fields = $fields;

    return $this;
  }


}

Я получаю данные через доктрину:

$output = $this->em->getRepository(Data::class)->findAll();

Выход:

array:2 [▼
  0 => Data {#7060 ▼
    -id: 1
    -uuid: "12345"
    -content: "blabla"
    -fields: Fields {#7164 ▼
      +__isInitialized__: false
      -id: 6
      -name: null
      -uuid: null
      -productgroup: null
      -type: null
       …2
    }
  }
  1 => Data {#7165 ▶}
]

Проблема в том, что данные "полей" ManyToOne фиксируют только идентификатор. Но не название или группа товаров. Это все "ноль". Но в моей базе данных оно не равно нулю.

Ответы [ 3 ]

2 голосов
/ 13 марта 2019

Обычно это происходит, когда вы сбрасываете объекты с отношениями.Для проверки того, что отношение полей имеет не нулевые значения.Сделайте это:

dump($output[0]->getFields()->getName())
1 голос
/ 13 марта 2019

Это связано с ленивой загрузкой доктрины, чтобы избежать перегрузки памяти. Как говорит @AythaNzt, если вы зацикливаете проблемные сущности, вы сможете получить доступ к их свойствам (когда вы, как и доктрина getField (), запускаете запрос для извлечения их данных)

Установите этот флажок, чтобы отобразить все дочерние поля: Избегайте ленивой загрузки Doctrine Symfony2

1 голос
/ 13 марта 2019

Это связано с тем, что в этом случае отношения из доктрины не загружаются.

Если вы обращаетесь к ранее отношению, например,

$output->fields

Фактически отношение будет загружено и поля выиграны 'будет ноль, если вы сбросите его потом

См. Отношения и классы прокси

...