0

我似乎真的很难找到任何真正涵盖在 CakePHP 中使用虚拟字段的信息。是的,我知道 CakePHP 站点上有官方文档,但是它不包括使用单独的表。

例如

表:产品

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

表:产品_食谱

 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 的新手,但我认为这是我应该这样做的方式。然后我如何使用虚拟字段来访问这些信息?我可以让它在一个模型中工作,但不能访问其他模型?

道格。

4

1 回答 1

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

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

于 2013-07-26T11:50:50.817 回答