Вступление
Все множественные результирующие наборы, возвращаемые Eloquent, являются экземплярами объекта, включая результаты, полученные с помощью метода или доступные через отношение. Объект коллекции Eloquent расширяет базовую коллекцию Laravel , поэтому он, естественно, наследует десятки методов, используемых для быстрой работы с базовым массивом моделей Eloquent.Illuminate\Database\Eloquent\Collection
get
Все коллекции также служат итераторами, позволяя вам циклически повторять их, как если бы они были простыми массивами PHP:
$users = App\User::where('active', 1)->get();
foreach ($users as $user) {
echo $user->name;
}
Тем не менее, коллекции гораздо более мощные, чем массивы, и предоставляют множество операций преобразования / сокращения, которые могут быть связаны с помощью интуитивно понятного интерфейса. Например, давайте удалим все неактивные модели и соберем имя для каждого оставшегося пользователя:
$users = App\User::all();
$names = $users->reject(function ($user) {
return $user->active === false;
})
->map(function ($user) {
return $user->name;
});
В то время как большинство методов сбора Красноречивых возвращают новый экземпляр красноречивой коллекции,
pluck
,keys
,zip
,collapse
,flatten
иflip
методы возвращают базовый сбор экземпляр. Аналогично, еслиmap
операция возвращает коллекцию, которая не содержит моделей Eloquent, она будет автоматически преобразована в базовую коллекцию.
Доступные методы
Все коллекции Eloquent расширяют базовый объект коллекции Laravel ; следовательно, они наследуют все мощные методы, предоставляемые базовым классом коллекции.
Кроме того, класс предоставляет расширенный набор методов, помогающих управлять коллекциями моделей. Большинство методов возвращают экземпляры; однако некоторые методы возвращают базовый экземпляр.Illuminate\Database\Eloquent\Collection
Illuminate\Database\Eloquent\Collection
Illuminate\Support\Collection
contains($key, $operator = null, $value = null)
Этот contains
метод может использоваться для определения, содержится ли данный экземпляр модели в коллекции. Этот метод принимает первичный ключ или экземпляр модели:
$users->contains(1);
$users->contains(User::find(1));
diff($items)
diff
Метод возвращает все модели, которые не присутствуют в данной коллекции:
use App\User;
$users = $users->diff(User::whereIn('id', [1, 2, 3])->get());
except($keys)
except
Метод возвращает все модели , которые не имеют данных первичных ключей:
$users = $users->except([1, 2, 3]);
find($key)
find
Метод находит модель , которая имеет заданный первичный ключ. Если $key
это экземпляр модели, find
попытается вернуть модель, соответствующую первичному ключу. Если $key
это массив ключей, find
вернет все модели, которые соответствуют $keys
использованию :whereIn()
$users = User::all();
$user = $users->find(1);
fresh($with = [])
fresh
Метод возвращает свежий экземпляр каждой модели в коллекции из базы данных. Кроме того, любые указанные отношения будут загружены с нетерпением:
$users = $users->fresh();
$users = $users->fresh('comments');
intersect($items)
intersect
Метод возвращает все модели, которые также присутствуют в данной коллекции:
use App\User;
$users = $users->intersect(User::whereIn('id', [1, 2, 3])->get());
load($relations)
В load
методе рвется загружает данные отношения для всех моделей в коллекции:
$users->load('comments', 'posts');
$users->load('comments.author');
loadMissing($relations)
В loadMissing
методе рвется загружает данные отношения для всех моделей в коллекции , если еще не загружены отношения:
$users->loadMissing('comments', 'posts');
$users->loadMissing('comments.author');
modelKeys
modelKeys
Метод возвращает первичные ключи для всех моделей в коллекции:
$users->modelKeys();
// [1, 2, 3, 4, 5]
makeVisible($attributes)
makeVisible
Метод дает видимые признаки, которые , как правило , «скрытый» на каждой модели в коллекции:
$users = $users->makeVisible(['address', 'phone_number']);
makeHidden($attributes)
makeHidden
Метод скрывает атрибуты, которые обычно «видны» на каждой модели в коллекции:
$users = $users->makeHidden(['address', 'phone_number']);
only($keys)
only
Метод возвращает все модели , которые данные первичных ключей:
$users = $users->only([1, 2, 3]);
unique($key = null, $strict = false)
unique
Метод возвращает все уникальные модели в коллекции. Любые модели того же типа с тем же первичным ключом, что и другая модель в коллекции, удаляются.
$users = $users->unique();
Собственные коллекции
Если вам нужно использовать пользовательский Collection
объект со своими собственными методами расширения, вы можете переопределить newCollection
метод в вашей модели:
<?php
namespace App;
use App\CustomCollection;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
/**
* Create a new Eloquent Collection instance.
*
* @param array $models
* @return \Illuminate\Database\Eloquent\Collection
*/
public function newCollection(array $models = [])
{
return new CustomCollection($models);
}
}
Как только вы определили newCollection
метод, вы получите экземпляр вашей пользовательской коллекции в любое время, когда Eloquent возвращает Collection
экземпляр этой модели. Если вы хотите использовать настраиваемую коллекцию для каждой модели в вашем приложении, вы должны переопределить newCollection
метод в классе базовой модели, который расширен всеми вашими моделями.
0 комментариев