私は Doctrine には比較的慣れていませんが、SQL にはかなり精通しています。Symfony 2.3 アプリケーションで、次の MySQL クエリを Doctrine に効果的に変換できないようです。
select
asset.id as asset_id,
orgAsset.organization_id,
districtAsset.district_id,
deptAsset.department_id,
subjectAsset.subject_id,
schoolAsset.school_id,
teacherAsset.teacher_id,
sectionAsset.section_id,
syllabusAsset.syllabus_id
from asset
left join organizations_assets orgAsset on asset.id = orgAsset.asset_id
left join districts_assets districtAsset on asset.id = districtAsset.asset_id
left join departments_assets deptAsset on asset.id = deptAsset.asset_id
left join subjects_assets subjectAsset on asset.id = subjectAsset.asset_id
left join schools_assets schoolAsset on asset.id = schoolAsset.asset_id
left join teachers_assets teacherAsset on asset.id = teacherAsset.asset_id
left join sections_assets sectionAsset on asset.id = sectionAsset.asset_id
left join syllabus_assets syllabusAsset on asset.id = syllabusAsset.asset_id
where asset.id = ?;
すべてのテーブルは、オブジェクトがオブジェクトに結合され*_assets
た一方向の多対多テーブルです。*
Asset
私の最初の目標は、Doctrine を使用してこの種のクエリを機能させることです。私の最終目標は、Doctrine がアセットに関連付けられたオブジェクトのみを返すことです。これは、一方向の多対多オブジェクト マッピングの例です。Asset
オブジェクトに相互マッピングはありません。
class Organization
{
...
/**
* @ORM\ManyToMany(targetEntity="Asset")
* @ORM\JoinTable(name="organizations_assets",
* joinColumns={@ORM\JoinColumn(name="organization_id", referencedColumnName="id", nullable=true)},
* inverseJoinColumns={@ORM\JoinColumn(name="asset_id", referencedColumnName="id")}
* )
*
* @var ArrayCollection|Asset[]
*/
protected $assets;
...
}
拡張するオブジェクトAsset
は複雑すぎて、単一テーブルの継承に現実的にリファクタリングできません。
一方向のマッピングが問題ですか? これを処理するには、ネイティブ クエリを作成する必要がありますか? Doctrine がこれをネイティブに処理できないとは信じがたいので、簡単なことを見落としていることを願っています。