5

私はCakePHPでウェブサイトを作成していますが、私はそれが初めてです。この件に関する適切なリソースが見つかりませんでした。

ユーザーを登録するための 3 つのテーブル構造があります: UsersAddressesおよびContacts。次のような 3 つのテーブルすべての情報を含むビューを作成する必要があります。

氏名: [ ] (ユーザーから)
配送先住所: [ ] (住所から)
携帯電話: [ ] (連絡先から)
メールアドレス: [ ] (連絡先から)

この状況に対処する最善の方法は何ですか。特に保存用。これを表す新しいモデルを作成します。これには、save()メソッド自体があります (データベース内の sql ビューである可能性があります)。このビューを処理するためのコントローラーを作成しbindますunbind

INSERT2つの異なる連絡先になるので、両方の連絡先をどのように処理するのだろうか

私が掘り下げることができるヒントやリソースがあればうれしいです。

4

3 に答える 3

10

最新の 1.2 コードを使用している場合は、API の Model::saveAll を確認してください。

例えば。ビューは次のようになります。

echo $form->create('User', array('action' => 'add');
echo $form->input('User.name');
echo $form->input('Address.line_1');
echo $form->input('Contact.tel');
echo $form->end('Save');

次に、ユーザーコントローラーの追加メソッドで、次のようなものがあります。

...

if($this->User->saveAll($this->data)) {
 $this->Session->setFlash('Save Successful');
 $this->redirect(array('action' => 'index'));
} else {
 $this->Session->setFlash('Please review the form for errors');
}

...

User モデルでは、次のようなものが必要になります。

var $hasOne = array('Address', 'Contact');

それが役立つことを願っています!

http://api.cakephp.org/class_model.html#49f295217028004b5a723caf086a86b1

于 2008-09-22T00:44:59.230 に答える
4

CakePHP では、リレーションシップを使用してモデル間のリンクを簡単に維持できます。詳細については、 http://book.cakephp.org/view/78/Associations-Linking-Models-Togetherを参照してください。次に、適切なユーザーを取得すると、「無料で」そのアドレスと連絡先情報も取得できます。

于 2008-09-21T06:59:52.520 に答える
1

3モデル:ユーザー、住所、連絡先

User hasOne Address, Contact
Address belongsTo User
Contact belongsTo User

モデルでは、これを次のように定義します。

class User extends AppModel {
var $name = 'User';
var $hasOne = array('Address','Contact');
..

このビューを作成するには、user_idフィールド ind addresses連絡先テーブルが必要です

これをビューで使用するには、再帰関数を使用して User モデルで find を呼び出すだけです (ちなみに、users コントローラーは User モデルのみを使用します)。

$this->User->recursive = 1;
$this->set('user', $this->User->find('first', array('conditions'=>array('id'=>666)));

これにより、ビューの次の配列が生成されます。

array(
  'Use' => array(
     'id' => 666,
     'name' => 'Alexander'
),
  'Address' => array(
     'id' => 123,
     'zip' => 555
),
   'Contact' => array(
     'id' => 432,
     'phone' => '555-1515'
));
于 2008-09-25T09:57:49.470 に答える