【问题标题】:Cakephp 3 trouble modifying CollectionCakephp 3 修改集合的麻烦
【发布时间】:2020-02-17 21:54:16
【问题描述】:

我正在制作一个集合,其中一项任务是让它匹配任何不 = 到 NULL 且不等于“在线”的 Campus.campus_name 的 Campus_id

$onCampusesLocationsHc = $collection->match(['enrollment_type_id' => 1 ])->match(['location_id' => 1 ])->match(['campus_id' => !NULL]);

到目前为止效果很好,但在添加“或不等于'在线'的 Campus.campus_name”时遇到问题。

我已经添加了

->match(['campus.campus_name' => 'Online']);

如果应用第一个条件,它将不起作用。

->match(['campus_id' => !NULL]);

但它会过滤掉除在线类别之外的所有内容。 如果添加此行而不是 !=NULL 存在

我试图反其道而行之,但结果为空。

->match(['campus.campus_name !=' => 'Online']);

它应该返回六个校区。

努力在 Collection Filters 中找到可以让我将两个过滤器应用于一列的内容。

【问题讨论】:

  • 首先,让我们从匹配器过滤器仅应用基本相等比较的事实开始,它们不支持运算符或任何东西。另请注意!NULLvalue != NULL 不同,前者将简单地计算为布尔值true,并将值与该值进行比较,即value == true。话虽如此,我很难弄清楚你的条件应该是什么样子,因为你首先说你想使用AND,然后你说OR
  • 如果你想过滤你的收藏,似乎你可能需要filter功能,它允许你提供一个检查每个项目并返回truefalse的函数,具体取决于是否你想包括它。
  • ndm 是的,我明白你的意思。我首先评估以确保 Campus_id 字段中有一个值。一旦我有了那个列表,我需要从列表中过滤掉“在线”校园。所以是的,它应该首先是“IS NOT NULL”和“IS Not Online”。
  • 我会再次查看过滤器,看看它是否适用于这种情况。

标签: cakephp-3.0


【解决方案1】:

Greg Schmidt 带领我找到答案。我使用了 reject() 过滤器

->reject(function ($notOnline, $key) { return $notOnline->campus->campus_name === 'Online'; })

通过在末尾添加拒绝功能,我能够拒绝任何校园名称为 Online 的内容。其他六个校区现已出现

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 2012-08-25
    • 1970-01-01
    • 1970-01-01
    • 2012-05-30
    相关资源
    最近更新 更多