操作中、2つのテーブルのクエリでは問題はありませんでしたが、3つのテーブルのクエリで問題が発生し始めました
以下の3つのテーブルがあり、サブテーブルはplテーブル(uid、content)、userテーブル(id、username)、lybテーブル(uid、title)です
複数テーブルのクエリ操作にはいくつかの方法があります:
㈠モデルを見る(推奨)
ビューモデルを定義するには、ThinkModelViewModel を継承してから viewFields プロパティを設定するだけです
クエリを表示:
ビュークエリは異なるモデルのクエリと同じであり、違いはありません。
クエリ結果に重複データがあることがわかった場合は、グループ メソッドを使用して処理することもできます。
㈡参加
JOIN メソッドもコヒーレント操作メソッドの 1 つであり、複数のテーブルの列間の関係に基づいて 2 つ以上のテーブルのデータをクエリするために使用されます。
結合には通常、次のタイプがあります。異なるタイプの結合操作は、返されるデータの結果に影響します。
INNER JOIN : テーブル内に少なくとも 1 つの一致がある場合に行を返します (JOIN
と同等)
LEFT JOIN : 右側のテーブルに一致するものがない場合でも、左側のテーブルからすべての行を返します
RIGHT JOIN : 左側のテーブルに一致するものがない場合でも、右側のテーブルからすべての行を返します
FULL JOIN : いずれかのテーブルに一致がある限り行を返します
結合メソッドは上記の 4 つのタイプをサポートできます:
上記3つのテーブルに対して同じ操作を実行します
㈢テーブル
テーブルメソッドもモデルクラスのコヒーレント演算メソッドの一つで、主に演算対象のデータテーブルを指定するために使用されます。
使用方法
一般に、システムはモデルを操作するときに、現在対応するデータ テーブルを自動的に識別できるため、テーブル メソッドは通常次の目的で使用されます。
スイッチング操作のデータテーブル;
複数のテーブルに対する操作を実行します。
複数のテーブル クエリ:
$list=M()->table(array('think_select'=>'this0','think_student'=>'this1','think_class'=> ; 'this2'))
->where('this0.stu_id=this1.id および this0.class_id=this2.id')
->field('this0.id this0_id,this1.id this1_id,this2.id this2_id ')->select();
SQL を生成:
select this0.id this0_id,this1.id this1_id,this2.id this2_id
from think_select this0,think_student this1,think_class this2
where this0.stu_id=this1.id およびthis0.class_id=this2.id
リンククエリ:
$list=M()->table("think_select this0")->join('think_student this1 on this0.stu_id=this1.id')
- >join('think_class this2 on this0.stu_id=this2.id')
->field('this0.id this0_id,this1.id this1_id,this2.id this2_id')->select();
SQL を生成:
select this0.id this0_id,this1.id this1_id,this2.id this2_id
from think_select this0 left join think_student this1 on this0.stu_id=this1.id
left join think_class this2 on this0.stu_id=this2.id
ビューモデル
を次のように使用するにはclass ArticleViewModel extends ViewModel{
public $viewFields = array(
'Article' => array('id','title','content','key_id', 'task_id','aout','re','otime','url','correlation','c_length','ad','_type'=>'left'),
'Task' => array('_on'=>'Article.task_id=Task.id','task','num','able','user_id','lang','_type'=>'left'),
'ユーザー' => array('_on'=>'Task.user_id=User.id','manage','alie','belong_to','_type'=>'left'),
);
}
?>
詳細については、thinkphp マニュアルのビュー モデルのセクションを参照してください