0

次のシナリオ:

Recipe hasMany RecipeItem
RecipeItem belongsTo Recipe, Ingredient

Ingredientに関連付けることができますがhasMany RecipeItem、その関係は必要ありません。)

つまり、基本的に、結合テーブルのない片側HABTMです。これは、結合要素(RecipeItem)に追加の属性(count)が必要なためです。

この記事: http: //book.cakephp.org/1.3/view/1650/hasMany-through-The-Join-Modelは、一度にすべてを作成/保存する方法、または完全に分離する方法について説明しています。私が欲しいのは、一方の面(材料)を分離し、もう一方の面(レシピ)を関連付けと一緒に作成することです。新しいレシピを作成するときは、複数の材料を選択できます。

これをどのように行いますか?ありがとう。

4

1 に答える 1

0

正直なところ、スキーマを単純化する必要があると思います。不必要に複雑に聞こえます。RecipeItemとIngredientの両方のレコードが必要なのはなぜですか? それらは同じものであるべきだと思われます。

結合テーブルに追加のフィールドを作成できるため、追加の関係は必要ありません。Recipe HABTM Ingredient を使用するだけで完了できるはずだと思います。

また、cake の automagic が機能するように、フォーム データを正しくフォーマットするのに苦労する傾向があります。私にとっては、保存したい結合テーブル レコードを手動でフォーマットし、(既存のレコードをクリアした後) 結合テーブル モデルを使用して明示的に保存する方が簡単です。何かのようなもの:

$toSave = array();
$this->loadModel('RecipesIngredients');
foreach($this->data['Ingredient'] as $ingredient) {
    $toSave[] = array(
        'recipe_id'=>$this->data['Recipe']['id'],
        'ingredient_id'=>$ingredient['id'],
        'count'=>$ingredient['count']
    );
}
$this->RecipesIngredients->deleteAll(array('recipe_id'=>$this->data['Recipe']['id']);
$this->RecipesIngredients->saveAll($toSave);
于 2012-08-19T13:25:19.073 に答える