В моем проекте определена простая структура сущностей:
Страна> Регион> Провинция> Город
определено так:
class Town
{
/**
* @Id @Column(type="integer")
* @GeneratedValue(strategy="AUTO")
*/
private $id;
/** @Column(type="string", length=30,unique=FALSE) */
private $townname;
/** @Column(type="boolean") */
private $active;
// so that we know when a user has added a town
/** @Column(type="boolean") */
private $verified;
/**
* @ManyToOne(targetEntity="Province")
* @JoinColumn(name="provinces_id", referencedColumnName="id",nullable=FALSE)
*/
private $provinces_id;
и т.д.
OK. Вы поняли идею.
Теперь, если у пользователя есть город (много к одному), я бы хотел узнать провинцию, регион и страну для этого пользователя. Я мог бы создать метод репозитория для городского объекта, который предоставляет эти данные с использованием SQL или DQL. Что-то вроде:
SELECT `users`.`towns_id`,`towns`.`provinces_id`,`regions`.`countries_id`,`provinces`.`regions_id` FROM users , `regions`
LEFT JOIN `towns` ON `users`.`towns_id` = `towns`.`id`
LEFT JOIN `provinces` ON `towns`.`provinces_id` = `provinces`.`id`
Но это кажется неправильным, тем более что доктрина уже «знает» об отношениях между городами, провинциями, регионами и странами.
Есть ли более простой способ сделать это?