Наконец, мне удалось создать рабочие отношения для ссылок на Doctrine/Symfony2. Но, когда я запрашиваю find, все строки таблицы не возвращаются в том порядке, который я хочу. (Может быть, это не так просто, но я больше не могу найти решение.)
id parentId name
1 NULL music
2 NULL films
3 1 bands
4 1 guitars
5 NULL books
6 2 actors
FormBundle\Entity\Category:
type: entity
oneToMany:
children:
fetch: "EAGER"
targetEntity: FormBundle\Entity\Category
mappedBy: parent
cascade: ["all"]
manyToOne:
parent:
targetEntity: FormBundle\Entity\Category
inversedBy: children
joinColumn:
name: parentId
referencedColumnName: id
table: categories
repositoryClass: FormBundle\Entity\CategoryRepository
id:
id:
column: id
type: integer
id: true
generator:
strategy: AUTO
fields:
name:
type: string
length: '100'
lifecycleCallbacks: { }
Я попробовал orderBy (каким бы то ни было образом я мог найти в любом поле), но мне не удалось или ЛЮБОЙ прогресс с ним.
<?php
namespace FormBundle\Entity;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
/**
* Category
*/
class Category
{
/**
* @var integer
*/
private $id;
/**
* @var category
*/
private $parent;
/**
* @var arrayCollection
*/
private $children;
/**
* @var string
*/
private $name;
public function __construct()
{
$this->children = new ArrayCollection();
}
public function getChildren() {
return $this->children;
}
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set parentId
*
* @param integer $parentId
* @return Category
*/
public function setParent(Category $parent)
{
$this->parent = $parent;
return $this;
}
/**
* Get parentId
*
* @return integer
*/
public function getParent()
{
return $this->parent;
}
/**
* Set name
*
* @param string $name
* @return Category
*/
public function setName($name)
{
$this->name = $name;
return $this;
}
/**
* Get name
*
* @return string
*/
public function getName()
{
return $this->name;
}
}
<b>music</b>
bands
guitars
<b>films</b>
actors
<b>books</b>
Это будет список, но не беспокойтесь об этом прямо сейчас! Это о порядке!
Что я использую в своем контроллере для использования отношений и выборки строк в том порядке, в котором я хочу? Или еще лучше; что я помещаю в контроллер и репозиторий?
Я не хочу использовать DQL, поскольку это не значит, что Doctrine предназначен для использования. Я хочу изучить Учение, и это, кажется, очень хорошая вещь, чтобы учиться. Да, я читал документы в течение нескольких дней, но ничего не работает для меня. Может, я что-то упустил.
Ваша глубина дерева, вероятно, будет> 1, расширения Doctrine с его Tree-NestedSet станут хорошим выбором. Если это не так, ваш вопрос становится тривиальным:
В вашем контроллере:
$parentCategories = $categoryRepository->findBy(array('parent' => null));
return $this->render('path_to_your_view.html.twig', array(
'parentCategories' => $parentCategories
));
На ваш взгляд:
{% for parentCategory in parentCategories %}
<b>{{ parentCategory.getName() | e }}</b>
{% for childCategory in parentCategory.getChildren() %}
<p>{{ childCategory.getName() | e }}</p>
{% endfor %}
{% endfor %}