如果CakePHP还不存在,则通过CakePHP保存HasMany


CakePHP Saving HasMany through if it doesn't exist yet

我想知道是否有可能在CakePHP中轻松实现以下功能:

我有三个型号。RecipesIngredientsRecipeIngredients。一个Recipe可以有多个 ingredient ,这个关系通过Model RecipeIngredients保存,因此我们有一个HasMany through关系。

现在,当添加一个新的配方,我有多个成分,这可以很容易地保存与$this->Recipe->saveAssociated(); -只要我已经知道成分的外键。
然而,由于可能有无数的成分,因此不可能将它们全部填入<select>字段或类似的内容中。因此,我希望用户用$this->Recipe->RecipeIngredient->Ingredient['title']填写一个字段,并根据现有条目的标题检查数据库,如果是,获取id并将其填写在RecipeIngredients表中,否则创建一个新的Ingredient并将该id保存到RecipeIngredients

通常CakePHP充满了快捷方式,但在这种情况下我找不到任何东西,但也许有一个简单的解决方案,我忽略了…

那么,您可以做的是在模型中创建一个beforeSave函数。如果成分的POST'ed数据已经存在(您可以在选项LIKE中找到Ingredient['title']),则获取ID并将其存储在POST'ed数组中。如果数据库中还没有这样的成分,则直接存储它,获取保存的ID并将其存储在POST数组中。