0

ユーザー テーブルと、互いに関連付けたい都市のテーブルがあります。ご想像のとおり、都市は複数のユーザーを持つことができますが、1 つのユーザーは 1 つの都市にしかリンクできません。

テーブルの設定方法が本当にわかりません。City に $hasMany リレーションを、User に $hasOne リレーションを試すと、エラーが発生します。これは、city テーブルに client_id フィールドが見つからないためです。私の都市テーブルは修正される予定です。誰もテーブルを変更することはありません。このテーブルに都市に関する情報を保存したいだけです。

編集:これが私のテーブルと私のモデルです(シンプルに保たれています):

clients { id, firstname, lastname, city_id }
cities { id, name, some_other_data }

そして、ここに私のモデルがあります:

// User
class Client extends AppModel {
    public $hasOne = array(
        'City'
    );
}

// City
class City extends AppModel {
    public $useTable = 'cities';

    public $hasMany = array(
        'Client'
    );
}
4

2 に答える 2

2

関係を逆にする必要があります。クライアントは都市に「所属」します。(私は知っています、これは非論理的に聞こえます);

// User
class Client extends AppModel {
    public $belongsTo = array(
        'City'
    );
}

// City
class City extends AppModel {
    public $useTable = 'cities';

    public $hasMany = array(
        'Client'
    );
}

クライアントテーブルには、city_idこれを適切に機能させるためのフィールドが含まれている必要があります (テーブル定義を確認したところ、既に存在しているため、クライアントモデルを変更するだけで機能するはずです)。

于 2013-04-19T23:54:11.567 に答える
1

うまくいかないかもしれません。foreignkey を指定する必要があります。

    // User
class Client extends AppModel {
    public $belongsTo = array(
        'City'=> array(
        'className' => 'City',
        'foreignKey' => 'city_id'
     ) ,
    );
}
// City
class City extends AppModel {
    public $useTable = 'cities';

public $hasMany = array(
    'Client' => array(
        'className' => 'Client',
        'foreignKey' => 'city_id'
     ) ,
  ); 
}
于 2013-04-20T04:29:26.767 に答える