虚拟字段在CakePHP 2.-中使用多个表

时间:2013-07-23 15:41:46

标签: cakephp-2.0 field virtual

我似乎真的在努力寻找实际涵盖CakePHP中虚拟字段使用的任何信息。是的我知道CakePHP网站上有官方文档,但它不包括使用单独的表。

例如

表:产品

ID | PRODUCT | PRICE | QUANTITY
1  | Butter  | 2.50  | 250
2  | Flour   | 6.00  | 16000
3  | Egg     | 0.99  | 6

表:Products_Recipes

 Product_ID | Recipe_ID | Quantity | COST ("VIRTUAL FIELD")
 1          | 1         | 200      |= SUM (Products.Price/Products.Quantity) * Products_Recipes.Quantity
 2          | 1         | 400
 3          | 1         | 3

表:食谱

ID | RECIPE | COST ("Virtual Field")
1  | Pastry | Sum of Costs where Recipe_id is 1

对Mysql来说是一个新手,但我认为这是我应该这样做的方式。如何使用虚拟字段访问此信息?我可以让它在一个模型中工作但不能访问其他模型吗?

道格。

1 个答案:

答案 0 :(得分:1)

我认为你的表是这样的:

  • 产品(ID,产品,价格,数量)
  • Products_Recipes(product_id, recipe_id,数量)
  • 食谱(id,食谱)

(缺少的字段是您要创建的字段。)

我觉得在MySQL中创建更容易,然后在它工作时决定MySQL或CakePHP是否适合生产实施。 (并且,您需要比CakePHP示例更复杂。)

在MySQL中创建一个可行的解决方案:

为products_recipes

创建一个选择视图
CREATE VIEW vw_recipe_products AS
SELECT products_recipes.product_id, products_recipes.recipe_id, products_recipes.quantity,
,(Products.Price/Products.Quantity) * Products_Recipes.Quantity as COST 
FROM products_recipes
JOIN products
ON products_recipes.product_id = products.product_id

(我认为您不应该使用SUM运算符,因为您不需要GROUP BY子句)

然后是食谱

CREATE VIEW vw_recipes_with_cost
SELECT recipes.id, recipes.recipe, SUM(vw_recipes_products.cost) as cost
FROM recipes
JOIN vw_recipes_products
ON recipes.id = vw_recipes_products.recipe_id
GROUP BY recipes.id, recipes.recipe

最终,我认为你应该在MySQL中实现解决方案,因为GROUP BY子句和中间视图的使用。 (显然,还有其他解决方案,但利用MySQL。我发现用于简单解决方案的虚拟字段的CakePHP实现(例如,连接两个字段)){创建视图后,您将需要创建新模型或者更改现有表的useTable变量以改为使用视图。}