3

投稿用のテーブルと、返信投稿用の別のテーブルがあります。教義に正しくマッピングされた 1 つ (投稿) 対多 (返信投稿) の関係があります。2 つを結合して、期待どおりの応答ごとの配列の配列を取得できますが、元の投稿の内容は同じです。配列内の返信内容を含む投稿ごとに単一の配列/オブジェクトを返すことは可能ですか?

これが私が今得たものです(予想どおり):

array (size=2)
  0 => 
    array (size=2)
      'content' => string 'Test homework post' (length=18)
      'replyContent' => string 'this is a reply' (length=15)
  1 => 
    array (size=2)
      'content' => string 'Test homework post' (length=18)
      'replyContent' => string 'second reply' (length=12)

私はこのようなものが欲しい:

array (size=1)
  0 => 
    array (size=2)
      'content' => string 'Test homework post' (length=18)
      'replyContent' => 
                   array (size = 2)
                       0 => 'replyContent' => string 'this is a reply' (length=15)
                       1 => 'replyContent' => string 'second reply' (length=12)

私は最善の調査を行いましたが、オブジェクトではなく配列を返すことに関する結果しか出てきませんでした。不可能かもしれませんが、php クラスの定義で 1 対多の関係マッピングを検討している可能性があると思いました。

$this->[name for protected variable] = new ArrayCollection();

助けてくれてありがとう!

編集:これは私の教義のクエリです:

        SELECT
            homeworkPost.content,
            homeworkPostReplies.content AS replyContent
        FROM AcmeMainBundle:HomeworkPost homeworkPost
        LEFT JOIN homeworkPost.homeworkPostReplies homeworkPostReplies 
        WHERE homeworkPost.course = :course
4

2 に答える 2

0

DQL が投稿されたので更新します。

これを行う:

SELECT
    homeworkPost.content,
    homeworkPostReply.content
FROM AcmeMainBundle:HomeworkPost homeworkPost
LEFT JOIN AcmeMainBundle:HomeworkPostReply homeworkPostReply 
WHERE homeworkPost.course = :course

HomeworkPostReply エンティティに参加する必要があります


教義の結果が正しい場合

$qb->getQuery()->getArrayResult();

あなたの問題を解決するはずです。

結果データ ポスト クエリを処理することもできます。

$result = array();

$formatResult = function($post, $k) use (&$result)
{
    $found = false;
    for($i = 0, $count = count($result); $i < $count; $i++)
    {
        if($result[$i]['content'] == $post['content'])
        {
            $found = true;
            if(!isset($result[$i]['replyContent']))
            {
                $result[$i]['replyContent'] = array();
            }
            $result[$i]['replyContent'][]= $post['replyContent'];
            break;
        }
    }
    if(!$found){
        $result[] = array('content'=>$post['content'],
                'replyContent'=>array($post['replyContent']));
    }
};

array_walk($originalResult, $formatResult);

print_r($result);
于 2013-03-25T20:40:57.037 に答える