Php 拉维过滤器
有没有办法过滤Laravel上数据库查询返回的集合 这是什么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
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个)。还是你在努力实现其他目标?