1

ここでいくつかの投稿を見つけましたが、まだ機能しません:

Story と StoryCompleted の 2 つのエンティティがあります。

TA\Minigames\MinigameBundle\Entity\Story:
    type: entity
    table: story
    id:
        id:
            type: integer
            generator: { strategy: AUTO }
    oneToMany:
        completed:
            targetEntity: StoryCompleted
            mappedBy: story
    fields:
        cycle_nr: 
            type: integer

TA\Minigames\MinigameBundle\Entity\StoryCompleted:
    type: entity
    table: story_completed
    id:
        id:
            type: integer
            generator: { strategy: AUTO }
    manyToOne:
        story:
            targetEntity: Story
    fields:
        company_id: 
            type: integer
        completed:
            type: boolean

すべてのストーリーのリストを取得し、どのストーリーが company_id = 1 で表示されるかを知りたいので、左結合を試しました。

SELECT s FROM MGMinigameBundle:Story s LEFT JOIN s.completed c WHERE s.cycle_nr = 1 AND (c.company_id = $company_id OR c is NULL)

そして、次のような $company_id を取得したいと思います。

story_id completed
1         1
2         -
3         -

しかし、各ストーリーで、特定の $company_id に対して 1 つだけではなく、すべての完了したエンティティ (すべての $company_id に対して) を取得し、必要なものを見つけるためにそれらを反復処理する必要があります。:(

4

1 に答える 1

1

select ステートメントに「c」を含めます。

SELECT s, c 
FROM MGMinigameBundle:Story s 
LEFT JOIN s.completed c 
WHERE s.cycle_nr = 1 AND (c.company_id = $company_id OR c is NULL)

このように、StoryCompleted レコードは、company_id に基づいて Story オブジェクトの完成したコレクションを「ハイドレート」するために使用されます。これは、 DQL の「通常の結合」と「フェッチ結合」の違いです。

于 2013-02-21T20:36:32.550 に答える