Witam!
Mam problem z Doctrinem 2.6 (php 7.2).
Stworzyłem dwie encje - Book oraz Author. Połączyłem je relacją many-to-one (wiele książek może mieć jednego autora). Na podstawie encji wygenerowałem bazę danych oraz wypełniłem ją przykładowymi danymi. Poniżej kod:
<?php
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="books")
**/
class Book
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue
*/
private $book_nid;
/**
* @ORM\ManyToOne(targetEntity="Author", inversedBy="books")
* @ORM\JoinColumn(name="author_nid", referencedColumnName="author_nid")
*/
private $author;
// niżej publiczne gettery i settery
}
<?php
namespace Model;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity()
* @ORM\Table(name="authors")
**/
class Author
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue
*/
private $author_nid;
/**
* @ORM\Column(type="string")
*/
private $name;
/**
* @ORM\OneToMany(targetEntity="Book", mappedBy="author")
*/
private $books;
// niżej publiczne gettery
Problem jest taki, że jak wczytuję książkę, a następnie chcę przejść do autora i odczytać jego imię, dostaję nulla. Kod poniżej
$book_repository = $this->entity_manager->getRepository(Book::class);
$book = $book_repository->find(1);
$author_name = $book->getAuthor()->getName();
Zmienna $author_name
jest nullem
.
Jednakże, gdy w encji Book
w adnotacji relacji do autora dodam formułkę fetch="EAGER"
wszystko zaczyna działać poprawnie, relacja się wczytuje i $author_name
się wypełnia.
// fragment kodu encji Book
/**
* @ORM\ManyToOne(targetEntity="Author", inversedBy="books", fetch="EAGER")
* @ORM\JoinColumn(name="author_nid", referencedColumnName="author_nid")
*/
private $author;
Co ja robię tutaj nie tak?
Dodam jeszcze, że odczytanie danych "w drugą stronę" (książki danego autora) działa tak jak trzeba