Symfony2 ленивая загрузка не работает

У меня проблема с отложенной загрузкой в ​​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();
}

2

Решение

Итак, на что указывают предыдущие комментарии к вашей первоначальной публикации, так это то, что вам нужно реализовать отношение 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.

Если вы изменили свой код, вы должны обновить базу данных и восстановить элементы. После этого все будет работать нормально.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector