CakePHP 2.0でモデルをロードする最良の方法は今はわかりません。
質問1
複数のデータベースフィールドが別のモデルに関連付けられているモデルがあります。
customers
テーブルには、フィールド_country_Origin
_、_country_residence
_、および_country_study
_があり、これらすべてのフィールドにはテーブルcountries
のIDが含まれています。
私の顧客モデルでは、国モデルをどのようにロードするのですか?
質問2
Controller::loadModel()
は非推奨になりましたか、これを使用するのは悪い習慣ですか?コントローラーにモデルをロードするにはどうすればよいですか?
質問
コントローラーまたはモデルでApp::uses()
を使用する必要があるのはいつですか? loadModel()
、hasOne
、hasMany
、belongsTo
などの通常のメソッドを使用した場合、モデルがとにかくロードされるポイントがわかりません。
これは簡単に理解できるはずです。コントローラーを使用していて、別のモデルをロードする必要がある場合は、次を呼び出すことができます。
$this->loadModel('SomeModel');
その後、通常どおりにモデルを呼び出すことができます。
$this->SomeModel->read(null, '1');
App::uses
は、クラスの遅延ロード用です。したがって、次を使用してモデルをロードできます。
App::uses('MyModel', 'Model');
しかし、それからあなたはそれを異なって呼ぶ必要があるでしょう:
$MyModel = new MyModel();
$MyModel->read(null, '1');
または
MyModel::read(null, '1');
どこでどのように使用したいかによって異なります。
好ましい方法は
$this->load('MyModel');
ただし、使用することもできます
public $uses = array('DefaultModel', 'MyModel');
.
.
$this->MyModel->field(...);
Cakeは両方をサポートしており、好きな人を自由に使用できます。
質問1
あなたの構造により、顧客と国のモデルの間には関連性があるので、モデルをロードする必要はありません。次のような各IDの仮想関連付けを作成できます。
'CountryOrigin' => array(
'className' => 'Country',
'foreignKey' => 'country_Origin_id',
'dependent' => true,
'conditions' => '',
'fields' => '',
'order' => '',
'limit' => '',
'offset' => '',
'exclusive' => '',
'finderQuery' => '',
'counterQuery' => ''
)
'CountryResidence' => array(
'className' => 'Country',
'foreignKey' => 'country_residence_id',
'dependent' => true,
'conditions' => '',
'fields' => '',
'order' => '',
'limit' => '',
'offset' => '',
'exclusive' => '',
'finderQuery' => '',
'counterQuery' => ''
)
これを行うことで、モデル間の関連付けを作成できるため、モデルを明示的にロードしたくありません。
モデルの読み込みは、使用できる関連付けがない場合に適しています。
ロードモデルの構文は、単一モデルロードの場合
$this->loadModel('Country');
これは、特定のアクションまたは条件のモデルをロードする場合により便利です。
コントローラー全体で使用したい場合は、複数のモデルのロードに$ uses変数を使用できます。
public $uses = array('Country','OtherModel');
次のようなモデルにアクセスできます。
$this->Country->find('count');