sql >> データベース >  >> RDS >> Mysql

結合されたテーブルを持つPDOFETCH_CLASS

    私の知る限り、PDOで直接サポートすることはできません。通常、ORMの責任であるクエリの結果から複雑なオブジェクトグラフを作成する必要がある場合。

    この機能が必要な場合は、Doctrine を使用することをお勧めします。 または Propel 自分で何かを書くのとは対照的に。他にも軽量かもしれないものもありますが、私はそれらの経験がありません。

    編集:

    多分私は他の人がそうするかもしれないと確信しているように質問を誤解したと思います。本当の問題は、結合された列にアクセスする方法であり、必ずしもそれらからオブジェクトを作成する方法ではないと思います。

    その場合は、PDO::FETCH_ASSOCのような標準のarryfethcメソッドを使用するだけです。 、PDO::FETCH_NUMERIC またはPDO::FETCH_BOTH クエリしたすべての列が表示されます。

    したがって、これを「オブジェクトグラフ」に変換する場合は、PDO::FETCH_CLASSを使用せずに手動で行う必要があります。 。

    例:

    //$db is pdo:
    // also notice im aliase the columns prefixing the name so that we can tell what belongs to
    // post and what belongs to user, an alternative approach would be to use FETCH_NUMERIC,
    // which just uses the column positions from the seelct statement as the keys
    // so in this case post.id would be in the array as key 0, and user.name would be in the
    // array as key 4
    $stmt = $db->prepare('SELECT post.id as p_id, 
           post.text as p_text, 
           post.user_id as p_user_id, 
           user.id as u_id, 
           user.name as u_name
    FROM POST INNER JOIN User on post.user_id = user.id');
    
    $stmt->execute();
    
    while (($row = $stmt->fetch(PDO::FETCH_ASSOC)) !== false) {
       print_r($row);
       /* will output:
          Array (
             'p_id' => 'value'
             'p_text' => 'value'
             'p_user_id' => 'value'
             'u_id' => 'value',
             'u_name' => 'value'
          )
       So now you need to decide how to create your objects with the information returned
       */
    }
    


    1. 2つの範囲条件を持つクエリのインデックス作成をどのように行う必要がありますか?

    2. SELECTINTOOUTFILEを使用してMySQLErrcode13を回避するにはどうすればよいですか?

    3. mysql_install_db、エラー:35、Mac OS X 10.9.1

    4. InnoDBテーブルはMySQLに存在しますが、データベースを新しいサーバーにコピーした後は存在しないと言います