深度嵌套在 Laravel Collection 中的搜索值
Search value deeply nested within a Laravel Collection
我有一个 Eloquent Collection 就像这样(转储):
Collection {#788 ▼
#items: array:3 [▼
0 => Rating {#787 ▼
#table: "ratings"
+timestamps: false
#connection: null
#primaryKey: "id"
#keyType: "int"
#perPage: 15
+incrementing: true
#attributes: array:3 [▼
"id" => 1
"rating" => "50"
"type" => "min"
]
#original: array:3 [▶]
#relations: []
#hidden: []
#visible: []
#appends: []
#fillable: []
#guarded: array:1 [▶]
#dates: []
#dateFormat: null
#casts: []
#touches: []
#observables: []
#with: []
#morphClass: null
+exists: true
+wasRecentlyCreated: false
}
1 => Rating {#786 ▶}
2 => Rating {#785 ▶}
]
}
在我的一个观点中,我只需要显示 'max'
类型的评级,并且我试图过滤 collection 直到现在都没有成功。
到目前为止我的尝试:
if ($ratings && $ratings -> search('max') != false)
或
if ($ratings && $ratings -> contains('max'))
那么...实现此目标的聪明且 eloquent 方法是什么?
提前致谢。
您可以使用where
方法:https://laravel.com/docs/5.4/collections#method-where
$filtered_ratings = $ratings->where('type', 'max');
您还可以对集合使用 filter()
方法。
return $collection->filter(function ($value, $key) {
if($value->type == 'max'){
return $value;
}
});
我有一个 Eloquent Collection 就像这样(转储):
Collection {#788 ▼
#items: array:3 [▼
0 => Rating {#787 ▼
#table: "ratings"
+timestamps: false
#connection: null
#primaryKey: "id"
#keyType: "int"
#perPage: 15
+incrementing: true
#attributes: array:3 [▼
"id" => 1
"rating" => "50"
"type" => "min"
]
#original: array:3 [▶]
#relations: []
#hidden: []
#visible: []
#appends: []
#fillable: []
#guarded: array:1 [▶]
#dates: []
#dateFormat: null
#casts: []
#touches: []
#observables: []
#with: []
#morphClass: null
+exists: true
+wasRecentlyCreated: false
}
1 => Rating {#786 ▶}
2 => Rating {#785 ▶}
]
}
在我的一个观点中,我只需要显示 'max'
类型的评级,并且我试图过滤 collection 直到现在都没有成功。
到目前为止我的尝试:
if ($ratings && $ratings -> search('max') != false)
或
if ($ratings && $ratings -> contains('max'))
那么...实现此目标的聪明且 eloquent 方法是什么?
提前致谢。
您可以使用where
方法:https://laravel.com/docs/5.4/collections#method-where
$filtered_ratings = $ratings->where('type', 'max');
您还可以对集合使用 filter()
方法。
return $collection->filter(function ($value, $key) {
if($value->type == 'max'){
return $value;
}
});