2

私は次の状況にあります:

クライアントの詳細を保存するためのアドレスアプリケーションを開発しています。

私は次のdb-structureを持っています:

Clients hasMany Addresses
Addresses belongsTo Client
Addresses hasMany AddressEmails and AddressPhones

誰かが新しいクライアントを追加した場合、1つの電子メールと1つの電話番号を持つ彼のプライマリアドレスを保存する必要があります。

次のコードを使用してクライアントのadd-viewでこれを実行し、client-controllerでsaveAll-methodを呼び出すと、これは部分的に非常にうまく機能します。

 <?php
  echo $this->Form->input('client_group_id');
  echo $this->Form->input('company');
  echo $this->Form->input('firstname');
  echo $this->Form->input('lastname');
  echo $this->Form->input('www');
  echo $this->Form->input('Address.0.is_standard', array('type' => 'hidden', 'value' => '1'));
  echo $this->Form->input('Address.0.street');
  echo $this->Form->input('Address.0.zip');
  echo $this->Form->input('Address.0.city');
 ?>

しかし、このビューでメールアドレスと電話番号を保存する方法がわかりません。AddressEmail.0.emailのように考えましたが、うまくいきませんでした。


とった:

Nikが投稿したソリューションでは正常に機能しているので、$ this-> Client-> Address-> saveAll($ this-> data)と呼んでいますが、add-viewを次のように調整する必要がありました。

<?php
    echo $this->Form->input('client_group_id');
    echo $this->Form->input('company');
    echo $this->Form->input('firstname');
    echo $this->Form->input('lastname');
    echo $this->Form->input('www');
    echo $this->Form->input('Address.is_standard', array('type' => 'hidden', 'value' => '1'));
    echo $this->Form->input('Address.street');
    echo $this->Form->input('Address.zip');
    echo $this->Form->input('Address.city');
    echo $this->Form->input('AddressEmail.0.type', array('type' => 'hidden', 'value' => 'Standard'));
    echo $this->Form->input('AddressEmail.0.email');
    echo $this->Form->input('AddressPhone.0.type', array('type' => 'hidden', 'value' => 'Standard'));
    echo $this->Form->input('AddressPhone.0.number');
?>

Address-ModelからsaveAll()-メソッドを呼び出しているので、ゼロはもう必要ありません!

4

1 に答える 1

3

saveAll()を使用した関連データの保存は、直接関連付けられたモデルに対してのみ機能します。

したがって、基本的には、saveAll()クライアント(プライマリモデルとして)とアドレスを使用して保存できます。次のようにAdressモデルから保存することで実行できるメールと電話:

$this->Client->saveAll($data); //This saves Client and Address
$this->Client->Address->saveAll($data); //This saves Email and Phone

私はそれをテストしていませんが、このように動作するはずです。(フィールドが次のような命名規則に従っていると仮定します。

echo $this->Form->input('Email.0.field');
echo $this->Form->input('Email.1.field');
echo $this->Form->input('Email.2.field');
echo $this->Form->input('Phone.0.number');
echo $this->Form->input('Phone.1.number');
echo $this->Form->input('Phone.2.number');

アドレスIDを直接「キャッチ」するかどうかはわかりませんが、試すことはできます。

別の方法は、からモデルを保存することです

$this->Client-Address->saveAll($data);

それだけ。このようにして、関連するすべてのモデルが保存されます(ドキュメントによると-最初にかなり参照してください)。

于 2010-08-05T07:23:18.963 に答える