スーパークラスLibraryCommon
と 4 つのサブタイプがあります: Library
、PurchasedLibrary
、PurchasableLibrary
およびPersonalLibrary
。
Library
LibraryCommon
追加フィールドのない単純な拡張でPurchasedLibrary
あり、ユーザー エンティティがあります。ある例では、特定のユーザーに属するLibraries
すべてのものが必要です。PurchasedLibraries
だから私はでメソッドを作成しましたLibraryCommonRepository
:
public function findLibraries($user)
{
return $this->createQueryBuilder('l')
->where('l INSTANCE OF Library')
->orWhere('l INSTANCE OF PurchasedLibrary AND l.user = :user')
->setParameter(':user', $user)
->getQuery()
->getResult()
;
}
ただし、これはエラーになり[Semantical Error] line 0, col 182 near 'user = :user': Error: Class LibraryCommon has no field or association named user
ます。
何か不足していますか、それとも、必要な結果を得るために 2 つの個別のクエリを結合する必要がありますか?
さらに、ユーザーを提供せずに次のようにした場合:
public function findLibraries()
{
return $this->createQueryBuilder('l')
->where('l INSTANCE OF Library OR l INSTANCE OF PurchasedLibrary')
->getQuery()
->getResult()
;
}
生成されたクエリは次のようになります。
SELECT
...
FROM
library l0_
WHERE
(
l0_.type IN ('library')
OR l0_.type IN ('purchased')
)
AND l0_.type IN (
'library', 'personal', 'purchased',
'purchasable'
)
クエリを実行させる方法はありますかWHERE l0_.type IN ('library', 'purchased')