1

クイック ベスト プラクティスの質問。

User hasOne UserBasicInfo
UserBasicInfo には国 (ユーザーが住んでいる国) の select 要素があります。
select 要素は、単純な「countries」テーブル (ID、国名、略語) によって入力されます。

国のテーブルからデータを取得するために Model::query() を使用するのが最善ですか? または、このデータのモデルを作成する必要がありますか?

モデルを作成する場合、UserBasicInfo モデルとの関連付けを使用する必要がありますか? それとも $uses 変数を使用する必要がありますか?

それが答えを揺るがすなら、実際には多くの選択フィールドが同様の方法で入力されています.

4

3 に答える 3

1

それが答えを左右する場合、実際には、同様の方法で入力された多くの選択フィールドがあります。

かもしれない。複数の国の選択ボックスがありますか、それともこれらの選択フィールドはすべて異なるテーブルから取得していますか?前者の場合、optionsキーFormHelper::select()入力を使用して、1つの配列から複数の選択を設定できます。

コントローラ:

$this->loadModel('Country');
$this->set('countries', $this->Country->find('list'));

意見:

$this->Form->select('UserBillingInfo.country_id', $countries);
$this->Form->select('UserShippingInfo.country_id', $countries);
etc...

それ以外の場合は、通常、モデル間に適切な関連付けを作成し、Model::find('list')またはカスタムModelメソッドを使用してオプションを取得することでこの状況を処理します。変数に適切な名前を付けると、options変数がselectのオプションとして自動的に使用されます。

コントローラ:

$this->set('countries', $this->User->UserBasicInfo->Country->find('list'));

意見:

$this->Form->input('UserBasicInfo.country_id');
于 2013-01-07T17:32:19.673 に答える
1

Model::query() は、cakephp で何かを行うのに最適ではありません。

使用している UsersController アクションで

$this->set('countries', $this->User->Country->find('list'));

編集/追加フォームで

$this->Form->input('country_id');
于 2013-01-06T14:18:48.277 に答える
0

この種の選択要素にはビュー ヘルパーを使用します。あなたのケースを例にとると、次のようにします。

コントローラ:

class UsersController extends AppController {
      ....
      public $helpers = array('Common');
      ....
}

ヘルパー:

class CommonHelper extends AppHelper {
      ....
      public function get_country_list() {
            App::import( 'Model', 'Country' );
            $objCountry = new Country();
            $countries = $objCountry->find( 'list' );
            return $countries;
      }
      ....
}

見る:

....
echo $this->Form->input('country_id', array(
     'options' => $this->Common->get_country_list(),
     'value' => !empty($data['UserBasicInfo']['country_id']) ? $data['UserBasicInfo']['country_id'] : ''
));
....

Country モデルを持っていることが条件です。このようにして、任意のドロップダウン メニューに入力できます。乾杯!!!

于 2013-01-06T15:09:51.553 に答える