0
我有兩個實體User
和Items
用戶實體有一個存儲在$item_ids
中的項目id的數組,現在我想要的是當用戶被提取時,項目也被提取並且例如存儲在$item_storage
。帶有ID數組的Symfony Doctrine交叉引用表
這是可能的註釋類似OneToMany/ManyToOne/ManyToMany
還是我需要做一個自定義的Entity Repository類來做到這一點?
要清除。 作爲結果,我希望能夠做到以下
// ...
/**
* @Route("/show/", name="show")
*/
public function showAction()
{
$user= $this->getDoctrine()->getManager()
->getRepository('AppBundle\\Entity\\User')
->findOneById(1);
return $this->render('show/multi_array.html.twig', array(
'user' => $user->getName(),
'multi_array' => $user->getItemStorage(), // should return a array of Items
));
}
// ...
的$user->getItemStorage
陣列我想找回看起來是這樣的
Array ( [0] => Array ( [id] => 1 [name] => Item One [more_cols] => more data ) [1] => Array ( [id] => 2 [name] => Item Two [more_cols] => more data ) )
數據庫的條目會看起來像
User Table | Id | Name | Item_ids | | 1 | Me | a:2:{i:0;s:1:"1";i:1;s:1:"2";} | Items Table | Id | Name | More_cols | | 1 | Item One | more data | | 2 | Item Two | more data |
用戶實體
<?php
// src/AppBundle/Entity/User.php
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
/**
* @ORM\Entity
* @ORM\Table(name="users")
*/
class User
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\Column(type="string")
*/
protected $name;
/**
* @ORM\Column(type="array")
*/
protected $item_ids;
protected $item_storage;
public function __construct()
{
$this->item_storage = new ArrayCollection;
}
// ...
}
Item實體
<?php
// src/AppBundle/Entity/Items.php
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="users")
*/
class Items
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\Column(type="string")
*/
protected $name;
/**
* @ORM\Column(type="string")
*/
protected $more_cols;
// ...
}
是否有一些原因,你想存儲ids是序列化數組?您可以使用ManyToMany並將用戶和項目之間的連接存儲在單獨的表中。 –
@ivan我以爲@ORM \ Column(type =「array」)會將它保存在一個序列化數組中。 – Mazaka