Однією з сильних сторін Laravel є його елегантний синтаксис. Якщо у вас багато моделей та відносин у Laravel (через велику кількість таблиць у базі даних), обхід часто може закінчитися менш елегантним кодом. З часом три невеликі розширення довели свою користь для мене, про що я хотів би коротко представити нижче. Ми просто використовуємо деякі спадщини, магічні методи та власні колекції.
Спочатку ми створюємо нову модель під app \ ConvenienceModel.php:
b45e29b9125c2ab565b5526442437686
Тоді ми дозволяємо всім моделям успадковуватись від нашого нового ConvenienceModel:
b45e29b9125c2ab565b5526442437686
Поєднуйте власні функції із стосунками
Якщо ви хочете отримати підключені моделі, ви використовуєте стандартний синтаксис, щоб викликати їх:
b45e29b9125c2ab565b5526442437686
Якщо тепер ви додасте власну ділову логіку, то вам подобається використовувати позначення (нижнього) верблюда:
b45e29b9125c2ab565b5526442437686
Ми хочемо стандартизувати синтаксис обох варіантів. Для цього ми додаємо магічний метод __call до ConvenienceModel:
b45e29b9125c2ab565b5526442437686
Тому цей виклик також можливий у наведеному вище прикладі:
b45e29b9125c2ab565b5526442437686
Перевірте порожні об'єкти
Якщо ви хочете вивести назву країни на адресу людини, ви часто бачите такий код:
b45e29b9125c2ab565b5526442437686
Щоб запобігти цьому, ми включаємо бібліотеку stringhelper і повертаємо спеціальний об’єкт порожнього класу порожнім, якщо модель не знайдена:
b45e29b9125c2ab565b5526442437686
Це також робить виклик успішним (у цьому прикладі, якщо щось виявляється, виводиться назва країни, у всіх інших випадках - порожній рядок).
b45e29b9125c2ab565b5526442437686
Якщо ми також хочемо охопити випадок, що користувач з ідентифікатором 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