HABTM配有额外的配方成分列

时间:2010-10-27 10:39:07

标签: cakephp has-and-belongs-to-many

对于我的食谱分享网站,我想为食谱及其成分创建一个数据库和CakePHP模型。

我创建了两个表:食谱和配料。第三个表是ingredients_recipes的HABTM表,它还存储配方所需的成分量。如何为第三个表创建模型?

第三个表格看起来像这样:

recipe_id
ingredient_id
amount
measurement_unit

我还考虑为measurement_units添加另一个表来存储所有可能的单位(例如汤匙,茶匙,杯子等)。会那太多了吗?

2 个答案:

答案 0 :(得分:4)

在Cake的ORM中,HABTM实际上是以下两个模型关联结构的抽象(使用您的示例):

Recipe
-> hasMany IngredientsRecipe
           -> belongsTo Ingredient

Ingredient
-> hasMany IngredientsRecipe
           -> belongsTo Recipe

推断出IngredientsRecipe模型,仅用于链接两个一流模型IngredientRecipe

但是,在您的情况下,您实际上希望 IngredientsRecipe成为一流的模型,它打破了HABTM抽象。实际上,您需要做的是明确定义上面的两个关联结构,以便Cake将IngredientsRecipe模型视为一等公民,允许您查询它,将记录保存到其中等等。 / p>

另外,不,我不认为创建额外的MeasurementUnit模型太多了。它将为您提供更大的灵活性。

答案 1 :(得分:2)

想想这样,然后一次把它当作一块:

`Recipe` (1)--(n) IngredientsRecipe (n)--(1) Ingredient
  1. Recipe中,创建与IngredientsRecipe
  2. 的关联
  3. Ingredient中,创建与IngredientsRecipe
  4. 的关联
  5. IngredientsRecipe中创建与Recipe
  6. 的关联
  7. 仍然在IngredientsRecipe创建与Ingredient
  8. 的关联

    在你这样做的时候,忘掉HABTM并反思hasManybelongsTo

    顺便说一句,您不必调用模型IngredientsRecipe,这只是默认/约定。

    完成后,请将其视为适当的hasMany,belongsTo或HABTM。