thinkphpマルチテーブルクエリー、2つ以上のフィールドを関連付ける

1571 ワード

最近のプロジェクトではtpフレームワークが使用されており、いくつかの小さな問題が記録されています.今日はtp連表クエリーの質問です:a表のuser_id関連bテーブルのid,aテーブルのrace_id関連cテーブルのrace_id,aテーブルのrace_idとuser_id関連dテーブルのrace_idとuser_id.4テーブルの関連付け、aテーブルとdテーブルの2つのフィールドの関連付け.tpは国内で最も優れたphpフレームワークとして,単純なjoin関連テーブルを提供した.サンプルコードを次に示します
$where = array(
          'a.id'=>1,
          'b.id'=>1,
);
$result  = $this ->join('LEFT JOIN  b ON a.user_id = b.id')
                        ->join('LEFT JOIN  c ON a.race_id = c.race_id')
                        ->join('LEFT JOIN  d a.race_id = d.race_id AND a.user_id = d.user_id')
                        ->where($where)
                        ->select();

もちろん、これは小さな例にすぎません.where条件のa.idはaテーブルのidフィールドを表し、b.idは同じです.LEFTJOINはphpでの連表クエリーでよく使われるもので、join()はずっと加算できます(テーブル名に対応するフィールドが存在する限り、すなわちa.user_id=b.idであり、aテーブルにはuser_idが必要であり、bテーブルにはidが必要であり、条件が成立します)
テーブルに重複するフィールドがあることはよく知られていますが、thinkphpのfield()を使用するのが私の解決策です.例:
    $result  = $this ->join('LEFT JOIN  b ON a.user_id = b.id')
                        ->join('LEFT JOIN  c ON a.race_id = c.race_id')
                        ->join('LEFT JOIN  d a.race_id = d.race_id AND a.user_id = d.user_id')
                        ->where($where)
                        -> field('a.name as a_name , b.*,c.&,d.*')
                        ->select();

a.name as a_nameとは、aテーブルのnameフィールドをa_に変更することを意味します.nameが表示されます.b.*は、bテーブルのすべてのデータを取得することを表します.本文はあなたにmid米店に注目して、分かち合い続けるのに役立つと思います...