ThinkPHP アソシエーションモデル動作例分析

WBOY
リリース: 2016-06-13 11:58:16
オリジナル
868 人が閲覧しました

通常、ここで説明する関連付けには、次の 3 つのタイプが含まれます。

◇ 1 対 1 の関連付け: ONE_TO_ONE (HAS_ONE および BELONGS_TO を含む)
◇ 1 対多の関連付け: ONE_TO_MANY (HAS_MANY および BELONGS_TO を含む)
◇Many 多くの関連付けの場合: MANY_TO_MANY

Association 定義

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

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

コードをコピーします コードは次のとおりです。 🎜>

protected $_link = array(
' アソシエーション 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',
// さらに関連する属性を定義します
...
) ,
)


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',
' external_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'= >'記事',
'foreign_key'=>'userId',
'mapping_name'=>'articles',
'mapping_order'=>'create_time desc',
/ / さらに関連する属性を定義します
....
) ,


class_name 関連付けられるモデル クラス名

mapping_name データを取得するために使用される関連付けられたマッピング名
foreign_key 関連付けられた外部キー名
parent_key 自己参照関連付け関連フィールド
condition 関連付け条件
mapping_fields 関連付けのためにクエリされるフィールド
mapping_limit 関連付けのために返されるレコードの数
mapping_orderアソシエーションクエリの順序

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


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

"グループ"=>array(

'mapping_type' =>MANY_TO_MANY,
'class_name'=>'グループ',
'mapping_name'=>'グループ',
' foreign_key'=>'userId',
'relation_foreign_key' =>'goupId',
'relation_table'=>'think_gourpUser'
)


class_name モデル関連付けられるクラス名

mapping_name
foreign_key を使用してデータを取得するために使用されます。
relation_foreign_key 関連付けられたテーブルの外部キー名。関連付けによって返されるレコードの数。
mapping_order。テーブル名

関係クエリ

は、関係メソッドを使用します。相関関係を有効にするだけでなく、ローカル相関操作を制御することもできるため、すべての相関操作が制御下に置かれます。

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

$user の結果を出力可能これは次のようなデータです:



コードをコピー

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


array(
'id'=>1,
'アカウント'=>'ThinkPHP',
'パスワード'=>'123456',
'プロファイル'=> array(
'メール'=>'liu21st@gmail.com',
'ニックネーム'=>'つかの間',
) ,
)


関連書き込み

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


$User = D( "User" ) ;
$data = array();
$data["パスワード"]="123456"; ]= array(
'email'=>'liu21st@gmail.com',
'nickname' =>' つかの間の年',
) ;
$result = $User-> ;relation( true)->add($user);


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


関連付けの更新


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

$User = D( "User " );

$data["account"]= "ThinkPHP";
$data["password"]= "123456";
$data["Profile"]=array(
' email'= >'liu21st@gmail.com',
'nickname' =>'流年',
) ;
$result =$User->where ('id =3')->save($data);


関係の削除


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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート