У меня проблема с отложенной загрузкой в symfony2 / doctrine2.
У меня есть нормальный объект (например: тип элемента), и этот объект имеет идентификатор. Если я смотрю на объект во время выполнения, я вижу, что идентификатор установлен. Все остальные параметры, такие как значок и сумма, пусты. Я знаю, вот как работает отложенная загрузка, но когда я вызываю геттеры (getIcon), ничего не происходит. Атрибут значка все еще пуст. Я также пытался вызвать метод __load, но это не помогло.
Извините, забыл код
class Character {
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\OneToMany(targetEntity="Entity\Item", mappedBy="character")
*/
protected $item;
/*********************************************************************
* Custom methods
*/
public function getItem() {
return $this->item;
}
}
И это тот объект, где ленивая загрузка не работает.
class Item {
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\Column(type="integer")
*/
protected $amount;
/**
* @ORM\Column(type="string")
*/
protected $icon;
}
EDIT2:
Конструктор класса персонажей
public function __construct()
{
$this->item = new \Doctrine\Common\Collections\ArrayCollection();
}
Итак, на что указывают предыдущие комментарии к вашей первоначальной публикации, так это то, что вам нужно реализовать отношение ManyToOne в вашей сущности Item, чтобы все ваши вещи работали.
В yout Character Entity у вас есть эти строки кода
/**
* @ORM\OneToMany(targetEntity="Entity\Item", mappedBy="character")
*/
protected $item;
Это говорит о том, что у вас есть отношение к Entity Item, который отображает отношение в атрибуте «персонаж». В этом атрибуте сохраняется отношение. Если вы загляните в базу данных, вы не найдете никаких сохраненных отношений, потому что ваш класс Item не имеет описанного символа атрибута отображения. Как указывал gp_sflover, отношения OneToMany должны быть двунаправленными и требовать отношения ManyToOne на стороне «владельца». Итак, что вам нужно сделать, это добавить следующий код к вашей сущности элемента
/**
* @ORM\ManyToOne(targetEntity="Entity\Character", inversedBy="item")
*/
protected $character;
Атрибут inversedBy создает двунаправленное отношение. Без этого утверждения вы не сможете загрузить getItems из вашего объекта Character.
Если вы изменили свой код, вы должны обновить базу данных и восстановить элементы. После этого все будет работать нормально.
Других решений пока нет …