7 быстрых советов для вашего следующего проекта Laravel.

GuDron

dumpz.ws
Admin
Регистрация
28 Янв 2020
Сообщения
7,758
Реакции
1,450
Credits
25,277
1. Быстрая загрузка
При загрузке отношений модели мы могли бы использовать ускоренную загрузку, чтобы уменьшить количество запросов, выполняемых при извлечении данных.
Лучше извлекать только те столбцы отношений, которые действительно необходимы, лучше, если они будут использовать их все сразу.
Код:
$cars = Car::with('brand:id,name')->get();
Мы также могли бы загрузить отношение по умолчанию, добавив его в модель в protected "$with"переменной. При этом указанное отношение будет загружено во время обычной выборки.
Код:
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Car extends Model {
    /**
* The relationships that should always be loaded.
*/
    protected $with = ['brand'];
    /**
* Get the brand that builds the car.
*/
    public function brand() {
        return $this->belongsTo(Brand::class);
    }
}
2. Совместное использование данных в представлениях
если вы хотите совместно использовать некоторые переменные во всех представлениях в контроллере, вы можете добавить use View::shareв constructorcontroller.By
поступая таким образом, вы можете использовать переменную во всех генераторах представлений, основанных на этом контроллере.
Код:
namespace App\Http\Controllers;
use Illuminate\Support\Facades\View;
class CarController extends Controller
{
    /**
*  The variable $sharedData will be accessible
*  in both the index.blade.php and detail.blade.php.
*/
    public function __construct(){
        View::share('sharedData',['foo' => 'bar']);
    }

    public function index(){ 
        return view('index');
    }

    public function detail(){ 
        return view('detail');
    }
}
3. Ограничения маршрута
Ограничение переменных маршрута может быть полезно для дополнительной безопасности ваших маршрутов или для разделения маршрутов с числовыми переменными и с буквенно-цифровыми переменными.
По соображениям удобства теперь вы можете использовать “WhereNumber, WhereAlpha, ...” вместо ограничений маршрута в стиле регулярных выражений.
Код:
/**
*   In Laravel vou can now use expressive Route restrictions
*   Such as: WhereNumber, whereAlpha, whereUuid,
*   whereAlphaNumeric, ...
*/
// without restrictions
Route::get('/user/fid}', function($id) {
    //
});
// with a regex style check
Route::get('/user/{id}', function($id){
    //
})->where('id', '[0-9]+');
// Only numbers allowed
Route::get('/user/{id}', function($id) {
    //
})->whereNumber('id');
// Only alpha allowed
Route::get('/user/{name}', function ($id) {
    //
})->whereAlpha('name'):
4. Выборка моделей без связи
Получение данных на основе отсутствия связи упрощает работу с этим doenstHaveметодом. Например, выборка всех заказов, у которых еще нет счета-фактуры.
Код:
/**
*   Fetch models that don't have a certain relationship
*   For example: Get all orders without an invoice.
*/

$orders = Order::doesntHave('invoice')->get();

/**
*   You can also chain "take" to this, F.E. take only 10
*/

$orders = Order::doesntHave('invoice')->take(10)->get():
5. Правильное копирование моделей
Дублирование моделей может привести к путанице в вашем коде. Особенно когда в модели много элементов, существует риск того, что один из столбцов не будет скопирован из-за человеческой ошибки. Этого можно избежать, используя replicateметод, который поставляется с Laravel бесплатно.
Код:
/**
*   Copying models done correctly.
*   Using the replicate function.
*/

// How you could do it.
$newCar = new Car();
$newCar->model = $car->model;
$newCar->brand = $car->brand;
$newCar->catalogPrice = $car->catalogPrice;
$newCar->hp = $car->hp;
// ...
$newCar->save();

//  How you should do it.
$newCar = $car->replicate();
$newCar->save();
6. Тихое сохранение данных
Иногда нам нужно обновить некоторые данные о модели, просто некоторые мелочи.
Но в этих случаях мы не хотим запускать какие-либо события модели, если таковые имеются, например, уведомления или другие автоматизированные процессы.

Мы можем сохранить все наши изменения в модели, не вызывая эти события, используя saveQuietlyметод. Таким образом, наши обновления будут храниться в тайне, как указано в названии метода, таким образом, без запуска каких-либо событий.
Код:
/**
*   Updating model data without triggering
*   the Model Events? Save them Quietly.
*/

$user = User::find($id);
$user->firstname = "John";
$user->saveQuietly();
7. Запасной маршрут
Когда пользователь посещает маршрут, который не существует, это будет код ошибки 404.
На самом деле мы могли бы запретить отображение страницы ошибок 404 по умолчанию и заменить ее нашей собственной или предоставить некоторую пользовательскую логику, которую мы хотим выполнять всякий раз, когда это происходит.
Код:
/**
*   Show a custom page when a user runs into a 404,
*   instead of throwing the regular 404.
*   With or without custom logic to spice it up.
*/

Route::fallback(function(){
    // Your custom 404 logic or custom view goes here
});