問題は次のとおりです。
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ます。departmentproductbrandobject_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>;
}
誰でも助けることができますか?