- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我们有一个包含所有产品的表格和一个包含所有订购商品的单独表格。订购的商品基本上是已订购产品的副本,与其源产品相关(通过外键)和仅与订购商品相关的附加数据,如订购数量。
通过这种方式,我们确保了订单数据的一致性,因为即使我们将来可能会删除旧产品,旧订单仍然以订单项的形式包含所有已订购的产品。订单和订单商品通过一个简单的交叉引用表(如 Propel 文档中的表格)连接,只有两个字段:order_id 和 item_id。
现在我必须实现一个功能来计算尚未发货的产品的订购数量,这样我们就可以跟踪我们的库存中有多少仍可供销售以及实际已经售出多少,但尚未发货。
为此,我必须选择与给定源产品相关且仅属于未发货订单的所有项目,然后对这些项目的数量字段求和。在 Propel2 中看起来像下面这样:
$ordered_qty = ItemQuery::create()
// Sum up the quantity of all ordered items and only select this one column
->withColumn('SUM(Item.Qty)', 'ordered_qty')
->select('ordered_qty')
// join with the cross referencing table between orders and order items
// so we can join with the actual order data in the next step
->leftJoinOrderItemCrossRef()
// join with the order data so that we can filter out
// already shipped (= archived) orders
->leftJoin('OrderItemCrossRef.Order')
->addJoinCondition('Order', 'Order.IsArchived != 1')
// only find the items relating to the desired product
->where('Item.ProductId = ?', $product_id)
->groupByProductId()
->findOne();
这个查询就像一个魅力,findOne() 返回尚未发货的订购数量。但是单独查询对我用处不大,我需要将结果添加到产品模型中。
我考虑过向 ProductQuery 添加一个自定义方法,为每个产品添加一个虚拟列“OrderedQty”,这样我就可以像这样选择所有产品:
$products = ProductQuery::create()
->withOrderedQty()
->find();
foreach($products as $product)
{
echo 'Ordered Qty of ' . $product->getName() . ': ' . $product->getOrderedQty() . '\n';
}
但我不知道如何使用子查询作为 Propel 中虚拟列的值。
最佳答案
如果我理解你的问题是正确的,你可以用 addSelectQuery
方法达到预期的效果。我没有所需的表结构,所以我只是给出它如何工作的提示。
addSelectQuery
在 from
子句中添加一个 Criteria
作为子查询。
// some query from item table
$itemQuery = \ItemQuery::create()->...;
$productQuery = \ProductQuery::create()
->addSelectQuery($itemQuery, 'item_query_result_alias', false);
在这之后你会得到一个像这样的查询 carcase:
SELECT item.*
FROM item, (/* here will be the $itemQuery select */) AS item_query_result_alias
然后只需使用 withColumn
方法添加一个虚拟列:
$products = \ProductQuery::create()
->withColumn('item_query_result_alias.ordered_qty', 'ordered_qty')
->addSelectQuery($itemQuery, 'item_query_result_alias', false)
->find();
查询将是:
SELECT item.*, item_query_result_alias.ordered_qty AS ordered_qty
FROM item, (/* here will be the $itemQuery select */) AS item_query_result_alias
获取结果:
var_dump($products->getFirst()->getVirtualColumn('ordered_qty'));
关于php - 推进 2 : Using a subquery as the value for a virtual column,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27487017/
这正确地呈现了标题,因为我可以看到一个列带有“Product ID”标题的表:。我正试图重构它,这样我就可以重用它,因为它们在整个应用程序中几乎是相同的:。在这种情况下,头不会呈现...检查页面元素中
我什至不知道如何表达这一点,但在 Python 中有没有一种方法可以引用等号之前的文本,而无需实际再次编写? ** 编辑 - 我在 Jupyter 中使用 python3 我似乎用了半辈子的时间来写作
假设我有一个包含以下列的字典 dict_ = [ {'key1': 'value1', 'key2': 'value2', 'key3': 'value3', '
假设我有一个包含以下列的字典 dict_ = [ {'key1': 'value1', 'key2': 'value2', 'key3': 'value3', '
假设我的数据库中有一张地铁 map ,其中每条线路的每个站点都是一行。如果我想知道我的线路在哪里互连: mysql> SELECT LineA.stop_id FROM LineA, LineB WH
代码 select c1,c2,c3,c4,c5,c6 from table where c5 in ('a', 'b') 从这里开始,我想将 c5 列拆分为两列,然后根据它们对 c
我正在尝试搜索表格中的两列,即标题和描述。但我想先搜索标题,然后再搜索描述。所以匹配标题的所有行排在第一位,所有匹配描述的行排在第二位 我可以使用单个 SQL 查询来实现吗? 最佳答案 您还可以使用
下面有以下 Python 数据框。 “标志”字段是我想要用代码创建的所需列。 我想要执行以下操作: 如果“分配类型”是预测的并且“Activities_Counter”大于 10,我想创建一个名为“F
我有两列,area 和 block,其中 area 是一个 int 类型,block 是一个 varchar。 现在我正在写两个查询: select * from table where area a
使用 Slick 2,我试图生成一个带有元组 IN 子句的查询: select * from my_table where (a, b) IN ((1, 87)); 给定: val seq: Seq[
我正在尝试从数据透视表中获取一组值,其中 A 列等于值数组,例如 ID 12 的 attribute_value_id 等于 3 和 9。这可以做到吗?我已经走了这么远... ID | post_id
我找不到这样做的有效方法。我在 Python 中有以下 DataFrame,列从 A 到 Z A B C ... Z 0 2.0 8.0 1.0 ... 5.0 1
我的数据框中有以下格式的数据: >>> df = pd.DataFrame(np.random.randn(6,4),index=dates,columns=list('ABCD')) >>> df
我有多个与我公司销售的产品相关的表被新产品取代,随着时间的推移,这导致了多个表的出现。 我一遍又一遍地使用以下查询,直到最终表中只剩下 2 个产品... CREATE TABLE mar15a
我有如下 2 个表:- 表A ------------------------------- | product_id | price | --------------------
我有一个名为 tbl_mainsheet7 的表,创建方式如下: pk_mainsheet client_id project_id mainsheet_id project_cat EA_
我得到了以下 HTML 结构: ... ... 我的 CSS: #main-container { width:80%; margin:20px auto;
对于我的以下要求,我无法获得解决方案。 如果 data.table(如下)在 Col1 和 Col3 中有匹配的值。替换 Col2 值(旧的 New-Val)。 Col1 Col2 Col3
我正在通过连接几个表来构建一个 View ,以通过 Entity Framework 提取数据。由于此 View 没有唯一列,EntityFramework 无法检索正确的结果集(即第一列重复)。 为
好的,我已经尝试了太久了,是时候寻求帮助了。我有一个看起来有点像这样的数据框: person fruit quantity all_fruits 0 p1 grapes 2
我是一名优秀的程序员,十分优秀!