Одна из сильных сторон 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