【发布时间】:2016-07-07 17:59:22
【问题描述】:
我有一张表如下:(transactions_filter):
+----+-----------------+------------+ --------------------------+ |身份证 |联系人姓名 | account_id |表达 | +----+-----------------+------------+ --------------------------+ | 1 |工资和工资 | 6123372 | SH\-01\-[0-9]*?\-477\-0 | | 2 |工资和工资 | 6123372 | SH\-01\-00000001\-550\-0 | | 3 |工资和工资 | 6123372 | SH\-01\-00000001\-551\-0 |然后我的交易如下所示:(帐户)
+---------+------------------------------------------------+-- ------------+--------+---------+-------------+----- ---------------+-------------+-------------+------ --------+------+----------+- ------------------+ |身份证 |姓名 |类别 ID |活跃 |余额 |说明 |未分配帐户 | IsTaxLocked |账户类型 |有活动 | DefaultTaxTypeId |修改 |创建 | +---------+------------------------------------------------+-- ------------+--------+---------+-------------+----- ---------------+-------------+-------------+------ --------+------+----------+- ------------------+ | 6123359 |会计费用 | 4 | 1 | 0.00 | | 0 | 0 | 1 | 0 | 1509579 | 2016-03-19 15:06:34 | 2016-03-19 15:06:34 | | 6123360 |广告 | 4 | 1 | 0.00 | | 0 | 0 | 1 | 0 | 1509579 | 2016-03-19 15:06:34 | 2016-03-19 15:06:34 | | 6123357 |坏账收回 | 3 | 1 | 0.00 | | 0 | 0 | 1 | 0 | 1509579 | 2016-03-19 15:06:34 | 2016-03-19 15:06:34 |我的交易表如下所示:
+-------+------------+------------+--------------- ----------------------------------------------+--- --------------+----------+------------ +---------------+---------------------+------------ ----------+ |编号 |外国身份证 |日期 |描述 |简短描述 |金额 |余额|函数代码 | created_at |更新时间 | +-------+------------+------------+--------------- ----------------------------------------------+--- --------------+----------+------------ +---------------+---------------------+------------ ----------+ | 38322 | | 2015-12-01 |每月 ACC 费用总部 | | -59.50 | -181792.19 | SERM | 2016-03-16 14:03:27 | 2016-03-16 14:03:27 | | 38323 | | 2015-12-01 |交易费用总部 | | -198.75 | -181990.94 | TRNC | 2016-03-16 14:03:27 | 2016-03-16 14:03:27 | | 38324 | | 2015-12-01 |现金存款费用总部 | | -2638.01 | -184628.95 | CSHC | 2016-03-16 14:03:27 | 2016-03-16 14:03:27 | | 38325 | | 2015-12-01 | OD: 分类帐费总公司 | | -40.00 | -184668.95 | FACF | 2016-03-16 14:03:27 | 2016-03-16 14:03:27 | | 38326 | | 2015-12-01 |借记利息总部 | | -2390.35 | -187059.30 |印尼盾 | 2016-03-16 14:03:27 | 2016-03-16 14:03:27 | | 38327 | | 2015-12-01 |来自结算 ABSA 银行 123.com 的停止订单 | ABSA 银行 123.com | 30.00 | -187029.30 |集成电路 | 2016-03-16 14:03:27 | 2016-03-16 14:03:27 | | 38328 | | 2015-12-01 |来自结算 ABSA 银行 acc8469 的停止订单 | ABSA 银行 acc8469 | 29.90 | -186999.40 |集成电路 | 2016-03-16 14:03:27 | 2016-03-16 14:03:27 | | 38329 | | 2015-12-01 |来自结算 ABSA 银行 321.co.za 的停止订单 | ABSA 银行 loxizea.co.za | 29.99 | -186969.41 |集成电路 | 2016-03-16 14:03:27 | 2016-03-16 14:03:27 | | 38330 | | 2015-12-01 |结算 ABSA 银行 cceyc | 停止订单ABSA 银行30.00 | -186939.41 |集成电路 | 2016-03-16 14:03:27 | 2016-03-16 14:03:27 | | 38331 | | 2015-12-01 |来自结算 ABSA 银行的停止订单 178444 123 | ABSA 银行 178444 123 | 35.00 | -186904.41 |集成电路 | 2016-03-16 14:03:27 | 2016-03-16 14:03:27 | +-------+------------+------------+--------------- ----------------------------------------------+--- --------------+----------+------------ +---------------+----------+------------ ----------+现在如何在不循环遍历每个过滤器的情况下将交易与过滤器匹配,如下所示:
$filters = \App\Models\Transaction\Filter::All();
$transactions = \App\Models\Transaction::All();
$data = [];
foreach($transactions as $transaction)
{
foreach($filters as $filter)
{
if(preg_match("/" . $filter->Expression . "/", $transaction->description))
{
$data[] = [
'date' => $transaction->date,
'ContactName' => $filter->ContactName,
'account_id' => $filter->account_id,
];
}
}
}
dd($data);
【问题讨论】:
-
如果 transactions_filters 是与交易的 1-N 关系,为什么不将交易 id 字段保存在 transactions_filters 表中?你能解释一下为什么你需要那个正则表达式吗?也许是因为它是 N-N?
-
事务表包含所有 20000+ 的银行交易,因此过滤器有助于帐户分配以了解交易是否为销售、工资等。我在第一篇文章中并不清楚,我会编辑它。