0

シナリオ

  • と がProviderありPackageます。
  • プロバイダーは、多数の注目のパッケージを持つことができます。
  • Providerしたがって、 と の間にHABTM が必要です。Package
  • Provider::edit()メソッドを使用して、すべてのプロバイダー特集パッケージを一発で保存したい

セットアップ
3 つのモデルがあります。
Provider FeaturedPackage Package

モデル

これらは ' HABTM Through ' を使用してセットアップされますが、HABTM と混同しないでください。したがって、関係は次のようになります。

ProviderhasManは所属していますFeaturedPackage
FeaturedPackagehasManは所属していますProvider
PackageFeaturedPackage
FeaturedPackagePackage

コントローラ

public function admin_edit($id) {
    if ($this->request->is('post') || $this->request->is('put')) {
        if ($this->Provider->saveAll($this->request->data)) {
// snip

意見

echo $this->Form->input('FeaturedPackages', array('type' => 'select', 'multiple' => true, 'options' => $packages));

リレーションシップの片側から
複数の可変数のレコードを保存する方法がわかりません。hasMany私は本を​​読んで、予想されるデータ配列がモデルの下で数値的にインデックス付けされるべきであることを知っています。

ただし、データを正しくフォーマットするためにフィールドに名前を付ける方法がわかりません。

hasManyビューを無視しているように見え、フィールドを追加することさえできないため、ビューをベイクできません。

試したフィールド名
FeaturedPackage
FeaturedPackage.FeaturedPackage
FeaturedPackage.package_id
FeaturedPackage..package_id
FeaturedPackage.[].package_id
FeaturedPackage.package_id][

4

1 に答える 1

0

コントローラーから呼び出されるモデルのデータ マッサージ メソッドを使用して、これを解決しました。

これにより、フォームから送信された配列が更新され、保存で期待されるものと一致します。

私は自分のソリューションをブログに書きました

于 2013-08-01T09:10:37.093 に答える