0

だから、私は3つのテーブルを持っています

表:ユーザー

_________________
| | ID | ユーザー |
-------------------
| | 1 | ロイ |
| | 2 | ベン | ベン |
|________|________|

Table: Hability_lists // 利用可能なすべての機能のリストを設定する場所

____________________________________
| | ID | カテゴリ | サブカテゴリ |
------------------------------------
| | 1 | プログラマー | PHP |
| | 2 | プログラマー | ASP |
|________|____________|_____________|

表:機能// すべてのユーザーの機能を設定する場所

________________________________________
| | ID | ユーザー ID | hability_list_id |
----------------------------------------------
| | 1 | 2 | 1 |
| | 2 | 1 | 2 |
|________|____________|____|

これにより、次のことがわかります。

RoyASP プログラマーで、BenPHP プログラマーです。

しかし、CakePHP を使用してこのような相対モデルを設定するにはどうすればよいでしょうか? 2 つのモデルを使用する方法は知っていますが、3 つのモデルを使用することはありません。

これを行う方法はありますか?それとももっと良い方法でしょうか?

前もって感謝します。

4

2 に答える 2

3

MVC フレームワークを使用する場合は、その規則に従うことを強くお勧めします。したがって、いくつかの変更はあなたにとって有益かもしれません。

あなたが探しているのは、「users」テーブルと「habilities」テーブルの間の HABTM (Has And Belongs To Many) 関連付けです *。テーブルの設計により、ユーザーは複数の機能を持つことができると推測しています。それ以外の場合は、hasMany 関連付けを確認する必要があります。

次のようになります。

テーブル機能: 機能から * を選択します。

+----+------------+----------------------+----------+
| id | category   | subcategoy | created | modified |
+----+------------+------------+---------+----------+
|  1 | Programmer | ASP        |         |          |
|  2 | Programmer | PHP        |         |          |
|  3 | Musician   | Classical  |         |          |
+----+------------+------------+---------+----------+

テーブル users: select * from users;

+----+-------+---------------------+---------------------+
| id | name  | created             | modified            | **
+----+-------+---------------------+---------------------+
|  1 | Roy   | 2012-08-15 02:52:18 | 2013-01-17 03:25:28 |
|  2 | Ben   | 2012-11-10 03:36:12 | 2012-11-10 03:36:12 |
+----+-------+---------------------+---------------------+

HABTM のリレーショナル テーブル: select * from habilities_users;

+----+-------------+-------------------+----------+
| id | hability_id | user_id | created | modified |
+----+-------------+---------+---------+----------+
|  1 | 1           | 2       |         |          |
|  2 | 2           | 1       |         |          |
+----+-------------+---------+---------+----------+

habilities_users の参照列を見てください。それらは、CakePHP で動作するように _id サフィックスが付いた単数形です。

モデル クラスを定義することも重要です。これは、すべての関連付けを定義する場所だからです。

アプリ/モデル/User.php

<?php
class User extends AppModel {
  public $hasAndBelongsToMany = array('Hability');
}

アプリ/モデル/Hability.php

<?php
class Hability extends AppModel {
  public $hasAndBelongsToMany = array('User');
}

テーブル habilities_users にはモデル ファイルは必要ありません。その動作とプロパティは、関連付けられたモデルの宣言に暗黙的に含まれています。

* これらの名前を使用することも CakePHP の方法です。【リンク

** 各テーブルに「作成」と「変更」を追加すると、各レコードのイベントが自動的に保存されます。

于 2013-05-04T21:16:01.803 に答える
1

HasAndBelongsToMany (HABTM)を使用する必要があります。

これにより、2 つのモデルを持つことができUserHabilityそれらは「トゥイナー」テーブルによって結合されます。

于 2013-05-04T21:01:09.207 に答える