Я хочу указать связь между двумя объектами Item и ItemPrice. Элемент может иметь цену, но не обязательно, поэтому он должен быть чем-то вроде левого соединения в sql. Я использовал отношение OneToOne, JoinColumn с nullable = true и получаю Исключение EntityNotFoundException. Вот мой код:Доктрина - отношение OneToOne - EntityNotFoundException
class Item
{
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
protected $item_id;
/**
* @ORM\Column(type="string")
*/
protected $name;
/**
* @ORM\Column(type="string")
*/
protected $image_file;
/**
* @ORM\OneToOne(targetEntity="ItemPrice")
* @ORM\JoinColumn(name="item_id", referencedColumnName="item_id", nullable=true)
*/
protected $price;
...
}
class ItemPrice
{
/**
* @ORM\Column(type="integer")
* @ORM\Id
*/
protected $item_id;
/**
* @ORM\Column(type="integer")
*/
protected $gold;
/**
* @ORM\Column(type="integer")
*/
protected $silver;
/**
* @ORM\Column(type="integer")
*/
protected $bronze;
...
}
Таблицы:
CREATE TABLE `item` (
`item_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(150) NOT NULL,
`image_file` varchar(100) DEFAULT NULL,
PRIMARY KEY (`item_id`),
UNIQUE KEY `uk_item_name` (`name`));
CREATE TABLE `item_price` (
`item_id` int(11) NOT NULL,
`gold` int(11) NOT NULL DEFAULT '0',
`silver` int(11) NOT NULL DEFAULT '0',
`bronze` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`item_id`));
Я думаю, что я сделал, называется однонаправленным OneToOne: http://doctrine-orm.readthedocs.org/en/latest/reference/association-mapping.html#one-to-one-unidirectional на мой взгляд, это именно то, что мне нужно.
Вы можете указать свои определения пространства имен? – cptnk
Любой успех, решающий вашу проблему с моим ответом? – Wilt