Вот проблема:Несколько JoinColumns в Symfony2 с помощью аннотаций Doctrine?
Класс Routing
с атрибутами objectId
и objectType
. objectId
- это int, а objectType
- это строка. Причина этого заключалась в том, чтобы позволить одной и той же таблице хранить данные для разных типов маршрутов. Например, для маршрутизации Products
, Department
и Brand
. Таким образом, комбинация objectType
и objectId
- это моя JoinColumn.
Как создать такую двунаправленную связь с Doctrine2? Я смотрел на унаследованные отношения, но ни одна из этих концепций не была тем, что я ищу.
Я мог бы создать несколько представлений в базе данных и просто иметь несколько разных объектов маршрутизации, но это не лучший маршрут.
вот мои лица Department
, Product
и Brand
.
../Entity/Department.php
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity()
* @ORM\Table(name="departments")
*/
class Department implements DescribableInterface
{
/**
* @ORM\Id
* @ORM\Column(name="id", type="integer", length=11)
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\Column(name="status", type="string", length=1)
*/
private $status;
/**
* @ORM\Column(name="name", type="string", length=255)
*/
private $name;
...
../Entity/Product.php
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="products")
*/
class Product implements DescribableInterface
{
/**
* @ORM\Id
* @ORM\Column(name="id", type="integer", length=11)
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\Column(name="status", type="string", length=1)
*/
private $status;
/**
* @ORM\Column(name="product_code", type="string", length=100, nullable=true)
*/
private $productCode = '';
/**
* @ORM\Column(name="name", type="string", length=255)
*/
private $name;
...
../Entity/Brand.php
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="brands")
*/
class Brand
{
/**
* @ORM\Id
* @ORM\Column(name="id", type="integer", length=11)
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\Column(name="status", type="string", length=1)
*/
private $status = 'a';
/**
* @ORM\Column(name="name", type="string", length=255)
*/
private $name;
...
Каждый продукт, бренд и отдел имеет свой собственный URL, который проводится в таблице маршрутизации, установленной object_type
и object_id
, где object_type
является просто department
, product
или brand
, а object_id
является уникальным идентификатором соответствующего продукта, бренда или отдела.
../Entity/Routing.php
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="routing")
*/
class Routing
{
/**
* @ORM\Id
* @ORM\Column(name="id", type="integer", length=11)
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\Column(name="object_id", type="integer", length=11)
*/
private $objectId;
/**
* @ORM\Column(name="object_type", type="string", length=100)
*/
private $objectType;
/**
* @ORM\Column(name="url", type="text")
*/
private $url;
...
То, что я действительно борется с, как мне установить связь, поэтому отделы, продукты и бренды могут получить доступ к URL из одного объекта маршрутизации.
Я попытался добавить отношения к $objectId
, но, похоже, это не так. Можно ли настроить это так?
То, что я в основном пытаюсь достичь, чтобы получить объект данных и иметь возможность получить URL объекта, например:
$departments = $em->getRepository("AdamStaceySiteBundle:Department")->findAll();
foreach ($departments as $department)
{
echo '<a href="'.$department->getUrl().'">'.$department->getMenuTitle().'</a>;
}
Может кто-нибудь помочь?
Можете ли вы предоставить соответствующий код? – Hast
Я один, кто не спрашивает? –
@ ElnurAbdurrakhimov Вот почему я попросил код :) – Hast