Php 拉维过滤器

Php 拉维过滤器,php,laravel,eloquent,Php,Laravel,Eloquent,有没有办法过滤Laravel上数据库查询返回的集合 这是什么 1 => Person {#310 ▼ #table: "person" #attributes: array:15 [▼ "name" => "Jon Doe" "timeavailable" => "1,2,3,4,5,6,7,8" 2 => Person {#310 ▼ #table: "person" #attribut

有没有办法过滤Laravel上数据库查询返回的集合

这是什么

 1 => Person {#310 ▼
      #table: "person"
      #attributes: array:15 [▼
        "name" => "Jon Doe"
        "timeavailable" => "1,2,3,4,5,6,7,8"
 2 => Person {#310 ▼
      #table: "person"
      #attributes: array:15 [▼
        "name" => "Jon Moe"
        "timeavailable" => "1,2,5,7,8"
这里,我想过滤
timeavailable
属性。我只想显示
1,2,3
的结果。有没有办法过滤这个集合,这样我就只能得到这样的东西

1 => Person {#310 ▼
      #table: "person"
      #attributes: array:15 [▼
        "name" => "Jon Doe"
        "timeavailable" => "1,2,3"
 2 => Person {#310 ▼
      #table: "person"
      #attributes: array:15 [▼
        "name" => "Jon Moe"
        "timeavailable" => "1,2"

因此,过滤后的集合将只有
1,2,3
包含项。

我认为这不是最佳解决方案,但它可以解决此问题。检查这是否有帮助

尝试使用
集合
映射
。在内部函数中,可以分解、相交和分解
timeavailable

$limiter = [1,2,3];
$filtered = $array->map(function($person, $k) use ($limiter) {
    $ex = explode(',', $person->timeavailable);
    $intersect = array_intersect($limiter, $ex);
    $person->timeavailable = implode(",",$intersect);
    return $person;
});

对于小的结果来说,这很好,但是如果你打算在大量的结果中运行它,它会很慢。

一种方法是在你的查询中使用
FIND\u IN\u SET
mysql函数。第二种方法是使用回调来过滤函数,在其中分解
timeavailable
并查看其中的项是否符合您的条件。第三种方法是改进数据库设计,这样
Person
将有许多
TimeAvailable
。是否要从集合中删除
Person
实例,这些实例在
TimeAvailable
字段中没有1、2和3?在本例中,
John Moe
将被删除(有1个和2个,但没有3个),而
John Doe
将仍然存在(有1个、2个和3个)。还是你在努力实现其他目标?