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();
 }