質問

仮(なより良い例でしていたモデル名とは別のモデルツイン(一対の双子).双子は二人の外部キーというfirst_born_idとsecond_born_id参照のid分野の異なる二人(個人)設定方法を教えてくださいの関係ケーキ?

私のツインいようなもの:

$belongsTo = array('FirstBorn' => array('className' => 'Person',
                                        'foreignKey' => 'firstborn_id'),
                   'SecondBorn' => array('className' => 'Person',
                                         'foreignKey' => 'secondborn_id'));

がいつ、どのように設定さい。このように:

$hasOne = array('TwinAsFirstborn' => array('className' => 'Twin',
                                           'foreignKey' => 'firstborn_id'),
                'TwinAsSecondborn' => array('className' => 'Twin',
                                           'foreignKey' => 'secondborn_id'));

その時私は人について知りたい、そのツインっていなければいけないと考えてチェックの両方の関係。思い思いをわかりやすく伝えるための"ツイン"の関係者を代表すには二つの方法本人でツインの関係です。

やはりえこのセット。

役に立ちましたか?

解決

私のツイン例が少し混乱している。話をしていただくことを前提とし、 Product モデル(ツインのおばで常2 Component モデルになっています。

components: id - name
products: id - component1_id - component2_id

私の設定商品として

var $belongsTo = array(
    'Component1' => array(
        'className' => 'Component',
        'foreignKey' => 'component1_id'
    ),
    'Component2' => array(
         'className' => 'Component',
         'foreignKey' => 'component2_id'
    )
);

およびコンポーネント:

var $hasMany = array(
    'ProductWithComponentAsComponent1' => array(
        'className' => 'Product',
        'foreignKey' => 'component1_id'
    ),
    'ProductWithComponentAsComponent2' => array(
        'className' => 'Product',
        'foreignKey' => 'component2_id'
    )
);

基本的にあきお hasOnehasMany.各コンポーネントhasManyの製品で最初のコンポーネント.同時に、でhasManyの製品があしずりうわかいます。いることも明らかでない。

編集1: (Oh、"ProductWithComponentAsComponent#"うわけではなく、目的の説明をします。まず、甘aliasいによって実際のモデルです。)

編集2: 経験則を利用hasOne的でのみ利用させていただきたときの分割単一テーブルの多くのようなユーザー/プロフィール)

編集3: したい場合はすべての製品のためのコンポーネント、そしてこれまでには二つの方法があります。

(A)定義するforeignKeyとして false おhasManyの関係.

var $hasMany = array(
    'Product' => array(
        'className' => 'Product',
        'foreignKey' => false,
        'conditions' => array(
            'or' => array(
                "Product.component1_id = Component.id",
                "Product.component2_id = Component.id"
            )
        )
    )
);

(B)上記のメソッドは動作しない(ケーキの行為もし)などでもお使いいただけます場合でも、joinを構成です作成機能の部品モデルはこのように:

function fetchProducts($id) {
    if (!$id) {
        return null;
    }
    return $this->Product->find('all', array(
        'fields' => array('Product.*'),
        'joins' => array(
            array(
                'table' => 'components',
                'alias' => 'Component',
                'foreignKey' => false,
                'type' => 'inner',
                'conditions' => array(
                    'or' => array(
                        "Product.component1_id = Component.id",
                        "Product.component2_id = Component.id"
                    ),
                    'Component.id' => $id
                )
            )
        )
    ));
}

他のヒント

なぜあなたはこのように双子を定義するのでしょうか?

第一または第二の生まれた双子は、人です。事親を持つ仲間彼らは、彼らが「子供」であり、その「DOB」は同じ。

である事実があること

だからあなたのような何かをしないだろう

人 - >            ID、            名、            年齢、            DOB、            PARENT_ID

?PARENT_IDは、お子様のレコードに格納され、双子がDOBの親の下のすべての子を比較することによって決定される。

このメイクいて任意のより簡単にCakePHPの関係を設定するには?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top