У меня есть два объекта User
и Items
, пользовательский объект имеет массив идентификаторов элементов, хранящихся в $item_ids
, теперь, когда я хочу, когда пользователь получает выбор, элементы также извлекаются и, например, хранится в $item_storage
.Таблица перекрестных ссылок Symfony Doctrine с массивом идентификаторов
Возможно ли это с аннотациями, например 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 ) )
записей базы данных будет выглядеть как
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;
}
// ...
}
пункт, Entity
<?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;
// ...
}
Есть ли причина, по которой вы хотите хранить идентификаторы, является сериализованным массивом? Вы можете использовать ManyToMany и хранить соединения между Пользователями и Элементами в отдельной таблице. –
@ivan Я думал, что @ORM \ Column (type = "array") сохранит его в сериализованном массиве. – Mazaka