Уважаемые Тостеры!
Помоги решить проблему - третий день бьюсь! Начал изучать symfony. Задача такая:
Сущность 1 - sad (id, title)
Сущность 2 - me(id,val)
Связь: для каждой сущности 1 существует множество сущностей 2.
Делаю так:
Сущность 1 - sad
<?php
namespace Stocker\StockBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
/**
* @ORM\Entity(repositoryClass="Stocker\StockBundle\Entity\Repository\SadRepository")
* @ORM\Table(name="sad")
*/
class Sad
{
public function __construct()
{
$this->mes=new ArrayCollection();
}
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\Column(type="string")
*/
protected $title;
/**
* @ORM\OneToMany(targetEntity="Me", mappedBy="Sad")
*/
private $mes;
Сущность 2 - me
<?php
namespace Stocker\StockBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity(repositoryClass="Stocker\StockBundle\Entity\Repository\Sad1Repository")
* @ORM\Table(name="me")
*/
class Me
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\Column(type="string")
*/
protected $val;
/**
* @ORM\ManyToOne(targetEntity="Sad", inversedBy="mes")
* @ORM\JoinColumn(name="sad_id", referencedColumnName="id")
*/
private $sad;
Репозиторий sadRepository:
<?php
namespace Stocker\StockBundle\Entity\Repository;
/**
* SadRepository
*
* This class was generated by the Doctrine ORM. Add your own custom
* repository methods below.
*/
class SadRepository extends \Doctrine\ORM\EntityRepository
{
public function getSad(){
$qb=$this->createQueryBuilder('f')
->select('f');
return $qb->getQuery()->getResult();
}
}
Далее:
php app/console doctrine:generate:entities Stocker\StockBundle
Создаются гетеры, сетеры
php app/console doctrine:schema:update --force
Создаются таблицы в БД
Теперь, если в MySQL заполнять таблицу таблицу Me, то связанной поле будет подставлять значение из родительской таблицы выпадющим списком. То есть связи создаются правильно.
Далее в контроллере вызываю нужный репозиторий. В ответ:
array:2 [▼
0 => Sad {#458 ▼
#id: 1
#title: "asdf"
-mes: PersistentCollection {#475 ▼
-snapshot: []
-owner: Sad {#458}
-association: array:15 [ …15]
-em: EntityManager {#106 …11}
-backRefFieldName: "Sad"
-typeClass: ClassMetadata {#456 …}
-isDirty: false
#collection: ArrayCollection {#484 ▼
<b> -elements: []</b>
}
<b> #initialized: false</b>
}
}
1 => Sad {#482 ▶}
]
Проблема: коллекция объектов не создается.
Предистория. Изначально все сделал также, все работало, все хорошо. Начал городить много-ко-многим, создавать промежуточную таблицу и т.д. (Сейчас-то я уже понял, что ORM сама создаст промежуточные таблицы). В итоге этих операций данный алгоритм перестал работать, ссылаясь на
#initialized: false
Если в конструкторе Сущности 1 поставить die, то ничего не происходит. То есть явно конструктор сущности вызываться перестал.
Пробовал писать все по-новой, удалять таблицы из БД, создавать новые сущности, удалять и создавать старые. Короче, как бы я не пытался повторить алгоритм, но коллекции все равно не заполняются.