2016-01-05 4 views
0

Я очень новичок в Laravel и php, и перед вами стоит проблема с коллекцией. Коллекция формируется следующим образом:Фильтр объекта в Laravel 4.1

$users = $media->campaign->users; 

которые возвращают эти данные:

[{id: 1, name: "name", suspended: 0},{id: 2, name: "name2", suspended: 1}] 

Как я могу фильтровать этот объект в Laravel 4.1, чтобы получить только те элементы, которые имеют 0 приостановленные?

ответ

1

Использование array_filter(array $array[, callable $callback[, int $flag]]):

array_filter($users, function($value) { 
    return($value->suspended === 0); 
}); 

Проверить еще в Laravel 4.2 documentation, Тейлор написал там, что фильтрующие коллекции используют array_filter функцию. Также вы можете использовать метод $users = $users->filter(function($user) {});.

Кроме того, благодаря @xAoc, вы можете использовать фильтрацию по SQL запросов:

$users = $media->campaign 
    ->users() 
    ->where("suspended", "=", 0) 
    ->get(); 
+1

Будет быстрее, если использовать mysql-фильтрацию '$ media-> campaign-> users() -> где (" suspend "," = ", 0) -> get();' но ваш ответ тоже нормально :) – xAoc

+0

Это правда, я забыл о запросе SQL! –

+0

Я просто попробовал первый вариант и получил это: exception 'ErrorException' с сообщением 'array_filter() ожидает, что параметр 1 будет массивом, объект указан' – Leon

0

Поскольку вы делаете прямое «равно» сравнение, коллекция Laravel имеет метод where() вы можете использовать. Например:

$users = $media->campaign->users; 
$users->where('suspended', 0); 

Это хороший вариант, если у вас уже есть коллекция. Если, однако, у вас есть контроль над созданием коллекции, было бы более полезно получить только фактические данные, которые вы ищете. В этом случае вы можете добавить предложение where в инструкцию SQL, так что вы будете получать только нужные конечные записи. Например:

$users = $media->campaign->users()->where('suspended', '=', 0); 

NB: where() метод по сбору и where() метод на построитель запросов имеют различные сигнатуры. Конструктор запросов позволяет вам использовать оператор ('=', '>', '<' и т. Д.). В коллекции только прямое сравнение. Это вызывает множество людей.

Смежные вопросы