ホームページ  >  記事  >  バックエンド開発  >  ThinkPHP アソシエーションモデル動作例分析_PHPチュートリアル

ThinkPHP アソシエーションモデル動作例分析_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:16:31887ブラウズ

通常、ここで扱う関連付けには次の 3 つのタイプが含まれます:

◇ 1 対 1 の関連付け: ONE_TO_ONE (HAS_ONE と BELONGS_TO を含む)
◇ 1 対多の関連付け: ONE_TO_MANY (HAS_MANY と BELONGS_TO を含む)
◇ 多対- many association: MANY_TO_MANY

アソシエーション定義

データテーブルの関連付けられた CURD 操作には、現在サポートされている 4 つのタイプがあります: HAS_ONE、BELONGS_TO、HAS_MANY、MANY_TO_MANY。

モデルは、ビジネス モデルの複雑さに応じて、制限なく複数の関連付けを同時に定義できます。すべての関連付け定義は、モデル クラスの $_link メンバー変数で定義され、動的定義をサポートできます。アソシエーション操作をサポートするには、モデル クラスが RelationModel クラスを継承する必要があります。 アソシエーション定義の形式は次のとおりです。

コードをコピーします。 コードは次のとおりです。
protected $_link = array(
' Association 1 ' => array(
' アソシエーション属性 1' => ' 定義',
' アソシエーション属性 N' => ' 定義',
),
' アソシエーション属性 2' => array(
' アソシエーション属性 1' = > '定義',
' アソシエーション属性 N' => '定義',
),
...
);


HAS_ONE アソシエーションメソッドの定義:


コードをコピー コードは次のとおりです。
class UserModel extends RelationModel
{
public $_link = array(
'Profile'=> array(
'mapping_type' =>HAS_ONE,
'class_name'=>'Profile',
// 詳細を定義Associated 属性
...
) ,
);
}


mapping_type アソシエーション タイプ。これは、HAS_ONE アソシエーションの HAS_ONE 定数を使用して定義する必要があります。
class_name 関連付けられるモデルクラスの名前
mapping_name データの取得に使用される関連付けられたマッピング名
foreign_key 関連付けられた外部キー名
condition 関連付けられた条件
mapping_fields クエリ対象のフィールドを関連付けます
as_fields 関連付けられたフィールド値を直接マッピングします

BELONGS_TO 関連付けメソッドのフィールドの定義:


コードをコピー コードは次のとおりです:
'Dept'=> array(
'mapping_type'=>BELONGS_TO,
'class_name'=>'Dept',
'foreign_key'=>'userId',
'mapping_name'=>'dept',
// さらに関連付け属性を定義します
...
) ,


class_name 関連付けられるモデル クラス名
mapping_name データの取得に使用される関連付けられたマッピング名
foreign_key 関連付けられた外部キー名
mapping_fields クエリされる関連付けられたフィールド
condition 関連付けられた条件
parent_key 自己参照関連付けられた関連フィールド
as_fields 関連付けられたフィールドを直接マップする値をデータオブジェクト内のフィールドの関連付けメソッドの定義

HAS_MANY:


コードをコピー コードは次のとおりです:
'Article'=> array(
'mapping_type ' =>HAS_MANY,
'class_name' =>'Article',
'foreign_key'=>'userId',
'mapping_name'=>'articles',
'mapping_order'=>'create_time desc' ,
// さらに関連する属性を定義します... クエリされるフィールド
mapping_limit 関連付けによって返されるレコードの数
mapping_order 関連するクエリの並べ替え

MANY_TO_MANY 関連付けメソッドの定義:


コードをコピーします

コードは次のとおりです:


"Group"=>array(
'mapping_type'=>MANY_TO_MANY,
'class_name'=>'Group',
'mapping_name'=>'グループ'、
'foreign_key'=>'userId'、
'relation_foreign_key'=>'goupId'、'relation_table'=>'think_gourpUser' )
class_name 関連付けられるモデルクラス名
mapping_name データの取得に使用される関連付けられたマッピング名
foreign_key 関連付けられた外部キー名
relation_foreign_key 関連付けられたテーブルの外部キー名
mapping_limit 関連付けによって返されるレコードの数
マッピング順序 関連付けられたクエリの順序
relationship_table 多対多の中間リレーション テーブル名

リレーション クエリ

リレーション メソッドを使用して相関操作を実行する リレーション メソッドは、相関を有効にするだけでなく、ローカルの相関操作を制御することもでき、すべてを実行します。相関演算の制御下にあります。

$User = D( "User" );
$user = $User->realtion(true)->find(1);

Output $user 結果は次のようなデータになる可能性があります。
コードをコピーします コードは次のとおりです:
array(
'id'=>1,
'account'=>'ThinkPHP',
'password'=>'123456',
'プロフィール'=> ; array(
'メール'=>'liu21st@gmail.com',
'ニックネーム'=>'流年',
)


関連書き込み


コードは次のとおりです: $User = D( "User" );
$data["account"]="ThinkPHP"; ="123456";
$ data["プロフィール"]=array(
'メール'=>'liu21st@gmail.com',
'ニックネーム' =>'流年',
) ; User->relation(true )->add($user);


これにより、関連付けられたプロファイル データが自動的に書き込まれます。

関連付けの更新


コードをコピーします

コードは次のとおりです:
$User = D( "User" ); $data["account"]= "ThinkPHP"; "]= "123456"; $data["プロフィール"]=array( 'email'=>'liu21st@gmail.com',
'ニックネーム' =>'流年',
) ;
$result =$User ->relation(true)->where('id=3')->save($data);


関係の削除

$result =$User->relation(true)- >削除 ( "3" );


http://www.bkjia.com/PHPjc/325937.html

www.bkjia.com

tru​​e

http://www.bkjia.com/PHPjc/325937.html

通常、ここで扱う関連付けには、次の 3 つのタイプが含まれます。 ◇ 1 対 1 の関連付け: ONE_TO_ONE (HAS_ONE と BELONGS_TO を含む) ◇ 1 対多の関連付け: ONE_TO_MANY (HAS_MANY と...を含む)
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。