Doctrine2WHEREオプションのJOIN

ジェイクN

これは失敗します

$builder = $repo->createQueryBuilder("ub")
    ->where("ub.badge = :badge AND ub.user = :user AND ub.project = :project")
    ->setMaxResults(1)
    ->setParameter("project", $project)
    ->setParameter("user", $user)
    ->setParameter("badge", $badge);

projectこのエラーまたはあってもなくてもよい存在と結果

エンティティをクエリパラメータにバインドすることは、識別子を持つエンティティにのみ許可されます

クエリを次のように変更しても失敗し、他のエンティティではなくプロジェクトを提案します。ub(UserBadge)テーブルに行がない場合でも、これは失敗します。

$builder = $userBadgesRepo->createQueryBuilder("ub")
    ->where("ub.project = :project")
    ->setMaxResults(1)
    ->setParameter("project", $project);

projectWHEREステートメントで動作するようにこのクエリを変更するにはどうすればよいですか?

YML UserBadge

Acme\NameBundle\Entity\UserBadges:
    type: entity
    table: user_badges
    repositoryClass: Acme\NameBundle\Entity\UserBadgesRepository
    fields:
        id:
            type: integer
            id: true
            generator:
                strategy: AUTO

        added:
            type: datetime

    manyToOne:
        badge:
            targetEntity: Acme\NameBundle\Entity\Badge
            inversedBy: badge_users
            joinColumn:
                onDelete: CASCADE
                name: badge_id
                referencedColumnName: id
        user:
            targetEntity: Acme\NameBundle\Entity\User
            inversedBy: user_badges
            joinColumn:
                onDelete: CASCADE
                name: user_id
                referencedColumnName: id
        project:
            targetEntity: Acme\NameBundle\Entity\Project
            inversedBy: project_badges
            joinColumn:
                onDelete: CASCADE
                name: project_id
                referencedColumnName: id
                nullable: true

YMLプロジェクト

Acme\NameBundle\Entity\Project:
    type: entity
    table: project
    repositoryClass: Acme\NameBundle\Entity\ProjectRepository
    fields:
        id:
            type: integer
            id: true
            generator:
                strategy: AUTO
**SNIP**

    oneToMany:
         project_badges:
             targetEntity: Acme\NameBundle\Entity\UserBadges
             mappedBy: project
マルセル・ブルクハルト

これは機能するはずです:

$builder = $repo->createQueryBuilder("ub")
    ->leftJoin('ub.project', 'p')
    ->join('ub.badge', 'b')
    ->join('ub.user', 'u')
    ->where("b.id = :badge AND u.id = :user AND p.id = :project")
    ->setMaxResults(1)
    ->setParameter("project", $project->getId())
    ->setParameter("user", $user->getId())
    ->setParameter("badge", $badge->getId());

説明(コメントから抜粋):

関係は参照(id)によって格納され、それらによって直接クエリを実行できますが、クエリの時点でsqlは他のエンティティのテーブルを認識していないため、オブジェクト自体はクエリできません。リレーションシップオブジェクトは、手動で結合した後でのみ比較できます。

こちらのセクション5もお読みください:http//labs.octivi.com/mastering-symfony2-performance-doctrine

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Doctrine2WHEREオプションのJOIN

分類Dev

SQLオプションのJOIN

分類Dev

SqlAlchemy / mysqlオプションのWhere句

分類Dev

whereオプション付きのjavamysqldump

分類Dev

オプションのWHEREオプションを備えたLinq

分類Dev

knit2htmlのオプション

分類Dev

JPA基準API:オプションの関係のLEFT JOIN

分類Dev

symfony config:Doctrine InvalidConfigurationException:「doctrine.dbal」の下の認識されないオプション「options」

分類Dev

null許容/オプションの結合を使用したDoctrineクエリ

分類Dev

pymysql実行のオプションのWHERE条件

分類Dev

オプションのwhere句jasperレポート

分類Dev

mysqlでオプションのWhere句を作成します

分類Dev

オプションのパラメータと句.where

分類Dev

オプションの用途

分類Dev

Railsのオプション

分類Dev

オプションのPromiseAPI

分類Dev

オプションのFilterExpressionAWS

分類Dev

Doctrineキャッシュの認識されないオプションエラー

分類Dev

オプションのインジェクションダガー2

分類Dev

Swiftの2つのオプションの構文の違い

分類Dev

Symfony2Doctrineアソシエーションの結果

分類Dev

Scalaでの2つのオプションの処理

分類Dev

Scalaでの2つのオプションの処理

分類Dev

symfony2のオプションの複数のoneToMany関係

分類Dev

バッチでの2つのオプションの引数

分類Dev

1対多のオプションを持つWHEREステートメント

分類Dev

whereステートメントの場合はSwiftオプション

分類Dev

関数ポインタ-2つのオプション

分類Dev

select2オプションのクローン作成

Related 関連記事

ホットタグ

アーカイブ