2012-04-27 10 views
1

これは私の3番目のCakePHPアプリです。最初はHABTMタイプの関連付けが必要です。私はCake 2.1で作業しています.HABTMのパラメータが変更され、 '一意'キーを 'keepExisting'に設定することで余分な情報を保存できます。通常のHABTM関連では、2つのフィールド、それぞれの外部キーを持つテーブルがあります。私は3つの外部キーを持つものが必要だと思う。それは 'ユニーク'キーを使用することで可能ですか?または、関連を通じてhasManyを使用する必要がありますか?ここでCakePHP hasAndBelongsToMany vs hasMany〜

は私のスキーマです:

/* repair_orders */ 
CREATE TABLE repair_orders (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, 
    number VARCHAR(16), //Auto-generated repair order number 
    created DATETIME DEFAULT NULL, 
    modified DATETIME DEFAULT NULL 
); 

/* Employees */ 
CREATE TABLE employees (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, 
    name VARCHAR(16), 
    created DATETIME DEFAULT NULL, 
    modified DATETIME DEFAULT NULL 
); 

/* op_codes */ 
CREATE TABLE op_codes (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, 
    name VARCHAR(16), 
    sale_material DECIMAL(10,2), 
    cost_material DECIMAL(10,2), 
    created DATETIME DEFAULT NULL, 
    modified DATETIME DEFAULT NULL 
); 

オペコードは、基本的項目とそのコストのリストです。

修理指図には多くのオペレーションコードが含まれています。また、各修理命令で特定のオペレーションコードに割り当てられている従業員を追跡する必要があります。だから私の団体は次のようになり

/* repair_order_assignments */ 
CREATE TABLE repair_order_assignments (
    repair_order_id INT(16), 
    op_code_id INT(16), 
    employee_id INT(16) 
); 

:だから私は、それは別のテーブルを必要とするようなものを考えて

Repair_Order_Assignment hasMany Employee, Op_Code 
Employee belongsTo Repair_Order_Assignment 
Op_Code belongsTo Repair_Order_Assignment 

Repair_Order_Assignment hasAndBelongsToMany Repair_Order 
Repair_Order hasAndBelongsToMany Repair_Order_Assignment 

マニュアルによるとhasAndBelongsToManyの団体が保存されている場合、関連付けが最初に削除されます。新しい挿入物では置き換えられないので、列の余分なデータは失われます。ただし、2.1では、余分なデータを保存するために設定できる一意の変数があることに注意してください。この設定は一意のキーで動作するのですか、またはhasManyメソッドを使用する必要がありますか?

答えて

3

私は、HABTMの関係がタグと複数のカテゴリであることだけを発見しました。

メンバーシップ、フレンドシップ、または私が使用する関係は、作成/変更されたとしても、余分なデータをリレーションシップに付加することができます。私をHABTMから外してくれるもう一つのものは、replace-everything-on-updateロジックです。モデルのさまざまな部分を節約するのに苦労します。

+0

よろしくお願いいたします。それを通してhasMany。 – Stewie

関連する問題