Php Symfony条令与ID数组的交叉引用表
我有两个实体Php Symfony条令与ID数组的交叉引用表,php,symfony,doctrine-orm,doctrine,symfony-2.7,Php,Symfony,Doctrine Orm,Doctrine,Symfony 2.7,我有两个实体User和Items用户实体有一个存储在$item\u id中的项目ID数组,现在我想要的是,当用户被提取时,这些项目也被提取,例如存储在$item\u storage中 对于像OneToMany/ManyToOne/ManyToMany这样的注释,这是可能的,还是需要创建一个自定义的实体存储库类来实现这一点 澄清。 因此,我希望能够做到以下几点 // ... /** * @Route("/show/", name="show") */ public function show
User
和Items
用户实体有一个存储在$item\u id
中的项目ID数组,现在我想要的是,当用户被提取时,这些项目也被提取,例如存储在$item\u storage
中
对于像OneToMany/ManyToOne/ManyToMany
这样的注释,这是可能的,还是需要创建一个自定义的实体存储库类来实现这一点
澄清。
因此,我希望能够做到以下几点
// ...
/**
* @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
)
)
排列
(
[0]=>阵列
(
[id]=>1
[名称]=>第一项
[更多内容]=>更多数据
)
[1] =>阵列
(
[id]=>2
[名称]=>第二项
[更多内容]=>更多数据
)
)
数据库条目看起来像
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 |
用户表
|Id |名称|项目| Id|
|1 | Me | a:2:{i:0;s:1:1;i:1;s:1:2;}|
项目表
|Id | Name | More|cols|
|1 |第一项|更多数据|
|2 |第二项|更多数据|
用户实体
<?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;
}
// ...
}
正如@Ivan所说,根据您的业务逻辑,您可以使用OneToMany
和ManyToMany
。例如,我使用了OneToMany
关系
class User
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="name", type="string", length=255, unique=true)
*/
private $name;
/**
* @ORM\OneToMany(targetEntity="Items", mappedBy="user", cascade={"persist", "remove"})
*/
private $items;
//Getters and setters
}
和实体项
class Items
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\Column(type="string")
*/
protected $name;
/**
* @ORM\Column(type="string")
*/
protected $more_cols;
/**
* @ORM\ManyToOne(targetEntity="User", inversedBy="items")
* @ORM\JoinColumn(name="user_id", referencedColumnName="id")
*/
protected $user;
//Getters and setters
}
您可以获得如下用户项目:
$user->getItems();
但结果将不是数组的数组,而是对象的数组
forearch($user->getItems() as $item)
{
$item->getName();
$item->getMoreTools();
}
是否有某些原因使您希望将ID存储为序列化数组?您可以使用ManyToMany并将用户和项之间的连接存储在单独的表中。@ivan我以为@ORM\Column(type=“array”)会将其保存在序列化数组中。
forearch($user->getItems() as $item)
{
$item->getName();
$item->getMoreTools();
}