1

yml マッピングを持つエンティティ "BlogPosts" があります。

type: entity
table: blog_posts
id:
  id:
    type: integer
    generator: { strategy: AUTO }
fields:
  body:
    type: text
  created_at:
    type: datetime
manyToMany:
  replies:
    targetEntity: BlogPosts
    inversedBy: replyTo
    orderBy: {"id": "DESC"}
    orphanRemoval: true
    joinTable:
      name: blog_post_replies
      joinColumns:
        reply_to_id:
          referencedColumnName: id
      inverseJoinColumns:
        reply_id:
          referencedColumnName: id
  replyTo:
    targetEntity: BlogPosts
    mappedBy: replies
manyToOne:
  user:
    targetEntity: User
    inversedBy: posts
    joinColumns:
      user_id:
        referencedColumnName: id
        nullable: false

問題は、JOIN を使用してデータをフェッチしようとすると、結果が空になることです。

    $query = $em->createQuery("SELECT p, rl FROM <Bundle>:BlogPosts p JOIN p.replies rl WHERE p.user = 1");
    $posts = $query->getResult(); // Returns empty array

ただし、結合なしで完全に機能します。

    $query = $em->createQuery("SELECT p FROM <Bundle>:BlogPosts p WHERE p.user = 1");
    $posts = $query->getResult(); // Works as intended

私は何が欠けていますか?私は本当に絶望的です:(

編集:返信のある投稿のみを返すことがわかりました。すべての投稿を選択するにはどうすればよいですか?返信がある場合は返信もしますか?

4

1 に答える 1

1

だから私は問題を見つけました!JOIN の代わりに、LEFT JOIN を使用しました。

$query = $em->createQuery("SELECT p, rl FROM <Bundle>:BlogPosts p LEFT JOIN p.replies rl WHERE p.user = 1");
$posts = $query->getResult(); // Now it works like a charm!

これで、MySQL は結果をブログ投稿に結合します! 単純な JOIN を使用すると、投稿を返信に結合しようとします。この場合、投稿に何もない場合、結果は空になります!

于 2012-09-21T07:42:11.757 に答える