問題は次のとおりです。
Routing
属性objectId
とを持つクラスobjectType
。objectId
は整数で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>;
}
誰でも助けることができますか?