내가 요청 GET 매개 변수에 따라 정렬 기사를 내 ArticlesController에 방법이 있습니다정렬을 위해 콜백이 작동하지 않는 이유는 무엇입니까?
protected static function sortArticles(Collection $articles, string $sort_by, string $order): Collection
{
$sortBy = function ($by, $order) use ($articles) {
if ($order === 'asc') {
$method = 'sortBy';
} elseif ($order === 'desc') {
$method = 'sortByDesc';
}
return call_user_func([$articles, $method], [$by]);
};
switch ($sort_by) {
case 'title':
return $sortBy('title', $order);
break;
case 'views':
return $sortBy('views_count', $order);
break;
case 'comments':
return $sortBy(function ($article) { // This is my callback for sorting and it doesn't work as expected
return count($article->comments);
}, $order);
break;
case 'date':
return $sortBy('created_at', $order);
break;
}
}
모든 작품을 좋아하지만, sort_by = 코멘트 (스위치 번째 경우), 그냥 작동하지 않을 때 :
는 클래스 클로저 (1/1) ErrorException 개체는 문자열로 변환 할 수 없습니다
모름 왜 골에 call_user_func에 의해 호출 된 sortByDesc 방법 lection 인스턴스는 Closure를 인수로 받아들이지 않고 문자열로 변환하려고합니다. 내가 직접 컬렉션 sortBy 또는 sortByDesc를 호출하면 은, 모든 작품을 좋아 : 모델을 가져 오는 경우
이case 'comments':
return $articles->sortBy(function ($article) { // Gives no errors
return count($article->comments);
});
break;
클로저 대신 인수로'count ($ article-> comments)'를 사용할 수 없습니까? –
@NathanHeffley 그렇다면 그 맥락에서 무엇이 포함될 것입니까? sortBy()의 인수는 요소의 속성 이름 또는 각 Collection 요소의 Closure 반환 값을 포함하는 문자열이어야합니다. https://laravel.com/docs/5.5/collections#method-sortby – Audiophile
의견 개수가 아닌 주석 수를 기준으로 정렬하고 싶습니다. call_user_func가 $로 예상하는 값을 필드로 반환합니다. 이름 ... 따라서 문자열 문제 ... – Serge