(1-*)
Помимо $foo->getLogs() хочу еще иметь прямой доступ к последнему логу. Для этого в FooLog есть поле bool $latest.
Как правильно прописать атрибуты для поля Foo::$latestLog, чтобы оно джойнило foo_log по foo_log.foo_id = foo.id and latest is true, а в самой таблице foo не было поля latest_log_id ?
/ * @ORM\OneToMany(targetEntity="FooLog", mappedBy="foo") */ private $logs; / * @ORM\OneToOne(targetEntity="FooLog") * @ORM\JoinTable(name="foo_log", * joinColumns={@ORM\JoinColumn(name="id", referencedColumnName="foo_id")}, * inverseJoinColumns={@ORM\JoinColumn(name="log_id", referencedColumnName="id", unique=true)} * ) */ private $latestLog;
А чем не нравится вариант с latest log Id?)
навскидку, не вижу здесь ничего про latest=true, как это заработает?
public function getLatestLog() { return $this->getEntityManager()->createQuery(' SELECT fl FROM AppBundle:FooLog fl WHERE fl.foo = :foo AND fl.latest = true ORDER BY fl.id DESC ') ->setParameter('foo', $this) ->setMaxResults(1) ->getOneOrNullResult(); }
так добавь просто orderBy для релейшена
Таблица Foo огромная, сотни миллионов, а FooLog есть только у малого количества Foo, у тысяч. Плюс таких как FooLog связей там несколько, ну типа, Foo.XHistoryLog, Foo.YHistoryLog, etc..
тогда получается это только лейзи
Обсуждают сегодня