Мне трудно понять, как правильно использовать Doctrine 2 с Zend Framework.Я читаю документы и основываюсь на том, что я уже сделал, и на zendcasts .Проблемы на самом деле начинаются, когда я пытаюсь делать реляционные вещи с моей базой данных, так как я не очень уверен, как использовать коллекции доктрин.В моем тестовом примере у меня есть сущность User:
class User
{
/**
* @var integer
* @Column (name="id", type="integer", nullable=false)
* @Id
* @GenerateValue(strategy="IDENTIY")
*
*/
private $id;
/**
* @Column(type="string",length=60,nullable=true)
* @var string
*/
private $email;
/**
*
* @param \Doctring\Common\Collections\Collection $property
* @OneToMany(targetEntity="Countries",mappedBy="user", cascade={"persist", "remove"})
*/
private $countries;
public function __get($property)
{
return $this->$property;
}
public function __set($property, $value)
{
$this->$property = $value;
}
}
, которая связана с сущностью стран:
class Countries {
/**
* @var integer
* @Column (name="id", type="integer", nullable=false)
* @Id
* @GenerateValue(strategy="IDENTIY")
*
*/
private $id;
/**
*
* @var string
* @Column(type="string")
*/
private $countryName;
/**
*
* @var User
* @ManyToOne(targetEntity="User")
* @JoinColumns({
* @JoinColumn(name="user_id", referencedColumnName="id")
* })
*/
private $user;
public function __get($property)
{
return $this->$property;
}
public function __set($property, $value)
{
$this->$property = $value;
}
}
Теперь я могу присвоить странам из контроллера что-то вроде этого:
$p1 = new \Federico\Entity\Countries();
$p1->countryName = 'Argentina';
$p2 = new \Federico\Entity\Countries();
$p2->countryName = 'España';
$u = new \Federico\Entity\User();
$u->firstname = 'John';
$u->lastname = 'Doe';
$u->id = 1;
, который покажет мне этот объект:
object(Federico\Entity\User)[109]
private 'id' => int 1
private 'email' => null
private 'countries' =>
array
0 =>
object(Federico\Entity\Countries)[107]
private 'id' => null
private 'countryName' => string 'Argentina' (length=9)
private 'user' => null
1 =>
object(Federico\Entity\Countries)[108]
private 'id' => null
private 'countryName' => string 'España' (length=7)
private 'user' => null
public 'firstname' => string 'John' (length=4)
public 'lastname' => string 'Doe' (length=3)
Если вы обратите на это внимание, вы увидите, что свойство user установлено в null в объектах страны.Я не понимаю, должно ли это происходить так или нет.Кроме того, поскольку пользователям будет разрешено выбирать страны из списка флажков, и они смогут выбирать более одной страны, ... не должны ли страны каким-либо образом храниться в БД?