Одной из сильных сторон Laravel является его элегантный синтаксис. Если у вас много моделей и отношений в Laravel (из-за большого количества таблиц в базе данных), обход часто может закончиться менее элегантным кодом. Со временем мне пригодились три небольших расширения, о которых я хотел бы кратко рассказать ниже. Для этого мы просто используем наследование, магические методы и собственные коллекции.
Сначала мы создаем новую модель в app \ ConvenienceModel.php:
b45e29b9125c2ab565b5526442437686
Затем мы позволяем всем моделям унаследовать нашу новую ConvenienceModel:
b45e29b9125c2ab565b5526442437686
Смешивайте свои функции с отношениями
Если вы хотите получить подключенные модели, используйте стандартный синтаксис для их вызова:
b45e29b9125c2ab565b5526442437686
Если вы теперь добавляете свою собственную бизнес-логику, вам нравится использовать (нижнюю) нотацию верблюжьего регистра:
b45e29b9125c2ab565b5526442437686
Мы хотим стандартизировать синтаксис обоих вариантов. Для этого мы добавляем магический метод __call в ConvenienceModel:
b45e29b9125c2ab565b5526442437686
Этот вызов также возможен в приведенном выше примере.:
b45e29b9125c2ab565b5526442437686
Проверить пустые объекты
Если вам нужно вывести название страны, указанное в адресе человека, вы часто увидите следующий код.:
b45e29b9125c2ab565b5526442437686
Чтобы предотвратить это, мы подключаем библиотеку stringhelper и возвращаем специальный объект пустого класса `empty`, если модель не найдена.:
b45e29b9125c2ab565b5526442437686
Это означает, что вызов успешен (в данном примере, если что-то найдено, выводится название страны, во всех остальных случаях пустая строка):
b45e29b9125c2ab565b5526442437686
Если мы также хотим охватить случай, когда пользователь с ID 42 может даже не существовать, мы также создадим небольшую вспомогательную функцию для этого.:
b45e29b9125c2ab565b5526442437686
Таким образом, следующий вызов возвращает пустую строку, даже если пользователь вообще не существует.:
b45e29b9125c2ab565b5526442437686
Удобно обходить отношения n: m
Наконец, мы хотим упростить следующий код:
b45e29b9125c2ab565b5526442437686
Для этого мы используем возможность кастомных коллекций . Мы сначала расширяем удобную модель:
b45e29b9125c2ab565b5526442437686
Далее мы создаём файл app\Helpers\ConvenienceCollection.php , который гарантирует, что при вызове неизвестных функций в коллекциях, функция будет выполнена для всех элементов в коллекции.:
b45e29b9125c2ab565b5526442437686
Таким образом, мы можем использовать следующий код для вывода всех имен всех стран всех адресов всех родителей человека.:
b45e29b9125c2ab565b5526442437686
Но также возможны следующие вызовы:
b45e29b9125c2ab565b5526442437686
Сортировать по нескольким столбцам
Следующая команда сортирует данные только по местоположению , хотя, вероятно, это не было желаемым результатом.:
b45e29b9125c2ab565b5526442437686
Мы расширяем нашу коллекцию ConvenienceCollection, чтобы включить сортировку по нескольким столбцам:
b45e29b9125c2ab565b5526442437686
При этом мы можем отсортировать коллекцию по нескольким столбцам с:
b45e29b9125c2ab565b5526442437686
Стандартная сортировка
Мы расширяем ConvenienceCollection еще одной вспомогательной функцией:
b45e29b9125c2ab565b5526442437686
Теперь вы можете дать каждой модели индивидуальную стандартную функцию сортировки.:
b45e29b9125c2ab565b5526442437686
Итак, мы можем отсортировать коллекцию с помощью:
b45e29b9125c2ab565b5526442437686
Имена объектов
Каждая модель реализует метод getLabel (getName зависит от модели):
b45e29b9125c2ab565b5526442437686
С его помощью вы можете быстро и легко отобразить имя объекта. Затем вы можете реализовать вспомогательный метод sortByLabel в ConvenienceCollection:
b45e29b9125c2ab565b5526442437686
Пустые результаты
Если промежуточный шаг пуст, функции Laravel first () и last () обычно возвращают ноль. Поэтому мы вводим getFirst () и getLast (), чтобы следующий вызов всегда выполнялся успешно.:
b45e29b9125c2ab565b5526442437686
Таким образом, мы возвращаем __empty_helper, который распознает __x:
b45e29b9125c2ab565b5526442437686