Использование laravel
Журналирование
use IlluminateSupportFacadesLog; Log::info('Showing user profile for user: '.$id); //уровни журналирования Log::emergency($message); Log::alert($message); Log::critical($message); Log::error($message); Log::warning($message); Log::notice($message); Log::info($message); Log::debug($message);
ВЬЮШКИ
Вот здесь мног инфы https://laravel.ru/docs/v5/views
Вывод страницы оформления
return view('index', ['clients' => $clients]);
ВАЛИДАЦИЯ
class PostRequest extends Request { public function rules() { return [ 'title' => 'required|unique:posts|max:255', 'body' => 'required', 'publish_at' => 'nullable|date', ]; } }
SQL-лочка
$this->where('verified', 1)->whereNotNull('deleted_at')->get();R
Построитель запросов (builder)
$users = DB::table('users')->get();
foreach ($users as $user) {
echo $user->name;
}
$user = DB::table('users')->where('name', 'John')->first();
echo $user->name;
$email = DB::table('users')->where('name', 'John')->value('email');
$titles = DB::table('roles')->pluck('title');
foreach ($titles as $title) {
echo $title;
}
$roles = DB::table('roles')->pluck('title', 'name');
foreach ($roles as $name => $title) {
echo $title;
}
//обработка кусками результата запроса
DB::table('users')->orderBy('id')->chunk(100, function ($users) {
foreach ($users as $user) {
//
}
});
$users = DB::table('users')->count();
$price = DB::table('orders')->max('price');
$price = DB::table('orders')
->where('finalized', 1)
->avg('price');
//произвольные поля вернуть
$users = DB::table('users')->select('name', 'email as user_email')->get();
//отличающиеся результаты
$users = DB::table('users')->distinct()->get();
//добавить к набору результов ещё поле
$query = DB::table('users')->select('name');
$users = $query->addSelect('age')->get();
//сырые выражения
$users = DB::table('users')
->select(DB::raw('count(*) as user_count, status'))
->where('status', '<>', 1)
->groupBy('status')
->get();
// объединять запросы join
$users = DB::table('users')
->join('contacts', 'users.id', '=', 'contacts.user_id')
->join('orders', 'users.id', '=', 'orders.user_id')
->select('users.*', 'contacts.phone', 'orders.price')
->get();
$users = DB::table('users')
->leftJoin('posts', 'users.id', '=', 'posts.user_id')
->get();
$users = DB::table('sizes')
->crossJoin('colours')
->get();
//сложное объединение
DB::table('users')
->join('contacts', function ($join) {
$join->on('users.id', '=', 'contacts.user_id')->orOn(...);
})
->get();
//объединение с услвоием
DB::table('users')
->join('contacts', function ($join) {
$join->on('users.id', '=', 'contacts.user_id')
->where('contacts.user_id', '>', 5);
})
->get();
//слияние запросов. Ещё есть unionALL
$first = DB::table('users')
->whereNull('first_name');
$users = DB::table('users')
->whereNull('last_name')
->union($first)
->get();
//условия
$users = DB::table('users')->where('votes', '=', 100)->get();
$users = DB::table('users')
->where('votes', '>=', 100)
->get();
$users = DB::table('users')
->where('votes', '<>', 100)
->get();
$users = DB::table('users')
->where('name', 'like', 'T%')
->get();
//массив условий
$users = DB::table('users')->where([
['status', '=', '1'],
['subscribed', '<>', '1'],
])->get();
$users = DB::table('users')
->where('votes', '>', 100)
->orWhere('name', 'John')
->get();
$users = DB::table('users')
->whereBetween('votes', [1, 100])->get();
$users = DB::table('users')
->whereIn('id', [1, 2, 3])
->get();
$users = DB::table('users')
->whereNotIn('id', [1, 2, 3])
->get();
$users = DB::table('users')
->whereNull('updated_at')
->get();
$users = DB::table('users')
->whereNotNull('updated_at')
->get();
МетодwhereDate()
служит для сравнения значения столбца с датой:
$users = DB::table('users')
->whereDate('created_at', '2016-12-31')
->get();
МетодwhereMonth()
служит для сравнения значения столбца с месяцем в году:
$users = DB::table('users')
->whereMonth('created_at', '12')
->get();
МетодwhereDay()
служит для сравнения значения столбца с днём месяца:
$users = DB::table('users')
->whereDay('created_at', '31')
->get();
МетодwhereYear()
служит для сравнения значения столбца с указанным годом:
$users = DB::table('users')
->whereYear('created_at', '2016')
->get();
//магические методы
$admin = DB::table('users')->whereId(1)->first();
$john = DB::table('users')
->whereIdAndEmail(2, 'john@doe.com')
->first();
$jane = DB::table('users')
->whereNameOrAge('Jane', 22)
->first();
Для проверки на совпадение двух столбцов можно использовать методwhereColumn()
:
$users = DB::table('users')
->whereColumn('first_name', 'last_name')
->get();
В метод также можно передать оператор сравнения:
$users = DB::table('users')
->whereColumn('updated_at', '>', 'created_at')
->get();
В методwhereColumn()
также можно передать массив с несколькими условиями. Эти условия будут объединены оператором AND
:
$users = DB::table('users')
->whereColumn([
['first_name', '=', 'last_name'],
['updated_at', '>', 'created_at']
])->get();
//выборка по сложным параметрам
DB::table('users')
->where('name', '=', 'John')
->orWhere(function ($query) {
$query->where('votes', '>', 100)
->where('title', '<>', 'Admin');
})
->get();
//существует ли
//select * from users where exists ( select 1 from orders where //orders.user_id = users.id )
DB::table('users')
->whereExists(function ($query) {
$query->select(DB::raw(1))
->from('orders')
->whereRaw('orders.user_id = users.id');
})
->get();
//json в БД (>=mysql 5.7)
$users = DB::table('users')
->where('options->language', 'en')
->get();
$users = DB::table('users')
->where('preferences->dining->meal', 'salad')
->get();
//сортировка
$users = DB::table('users')
->orderBy('name', 'desc')
->get();
//сортировка по дате. Можнно передать имя столбца, по умолчанию
$user = DB::table('users')
->latest()
->first();
//для вывода случайной строки
$randomUser = DB::table('users')
->inRandomOrder()
->first();
//группировка
$users = DB::table('users')
->groupBy('account_id')
->having('account_id', '>', 100)
->get();
//группировка с сырой строкой в условии
$users = DB::table('orders')
>select('department', DB::raw('SUM(price) as total_sales'))
->groupBy('department')
->havingRaw('SUM(price) > 2500')
->get();
//для ограничения числа выводимых строк
$users = DB::table('users')->skip(10)->take(5)->get();
$users = DB::table('users')
->offset(10)
->limit(5)
->get();
//условное применение условия
$role = $request->input('role');
$users = DB::table('users') //если первый параметр true, то срабатывает замыкание
->when($role, function ($query) use ($role) {
return $query->where('role_id', $role);
})
->get();
//если первый параметр false , то срабатывает второе замыкание
$sortBy = null;
$users = DB::table('users')
->when($sortBy, function ($query) use ($sortBy) {
return $query->orderBy($sortBy);
}, function ($query) {
return $query->orderBy('name');
})
->get();
//для вставки строк в таблицу
DB::table('users')->insert(
['email' => 'john@example.com', 'votes' => 0]
);
DB::table('users')->insert([
['email' => 'taylor@example.com', 'votes' => 0],
['email' => 'dayle@example.com', 'votes' => 0]
]);
$id = DB::table('users')->insertGetId(
['email' => 'john@example.com', 'votes' => 0]
);
//обновление записей
DB::table('users')
->where('id', 1)
->update(['votes' => 1]);
//обновление с использованием json(>=mysql 5.7)
DB::table('users')
->where('id', 1)
->update(['options->enabled' => true]);
//увеличение/уменьшение значения в столбцах инкрементально/декрементально
DB::table('users')->increment('votes');
DB::table('users')->increment('votes', 5);
DB::table('users')->decrement('votes');
DB::table('users')->decrement('votes', 5);
DB::table('users')->increment('votes', 1, ['name' => 'John']);
//удаление записей
DB::table('users')->delete();
DB::table('users')->where('votes', '>', 100)->delete();
//полная очистка таблицы
DB::table('users')->truncate();
//разделяемая блокировка до конца транзакции
DB::table('users')->where('votes', '>', 100)->sharedLock()->get();
//можно запретить выбор строк другими разделяемыми блокировками
DB::table('users')->where('votes', '>', 100)->lockForUpdate()->get();
//для добавления условий where в цикле
$query = DB::table('название таблицы');
$query->where('что то сравниваешь', 'с чем то сравниваешь');
$query->groupBy('id')->get();
REQUEST
создать статью
$category->article()->create($request->validated());
Константы, языковые файлы
Вывод слова «normal»
Article::TYPE_NORMAL
Вывод текста из языкового файла
__('app.article_added')
Встроенные инструменты

Именования

Можно лучше написать
$request->session()->get('cart'); $request->input('name');
Можно лучше
session('cart'); $request->name;

Создавать
Вместо new использовать контейнер и фасады и IoC , чтобы не создавать сильное сопряжение между частями приложения
public function __construct(User $user) { $this->user = $user; } .... $this->user->create($request->validated());
IoC::register('discoball', function () { // создаём экземпляр объекта, как в примере выше: $db = new Discoball(Discoball::SHINY); $db->configure_shinyness('max'); $db->spin_speed('8900rpm'); // возвращаем созданный объект: return $db; }); ИЛИ $db = IoC::resolve('discoball'); IoC::singleton('discoball', function () { // создаём экземпляр объекта, как в примерах выше: $db = new Discoball(Discoball::SHINY); $db->configure_shinyness('max'); $db->spin_speed('8900rpm'); // возвращаем созданный объект: return $db; }); $db = IoC::resolve('discoball'); ИЛИ $db = new Discoball(Discoball::SHINY); IoC::singleton('discoball', $db); // получить наш дискотечный шар: $ball = IoC::resolve('discoball');
Работа с датами
// Модель protected $dates = ['ordered_at', 'created_at', 'updated_at'] // Читатель (accessor) public function getSomeDateAttribute($date) { return $date->format('m-d'); } // Шаблон {{ $object->ordered_at->toDateString() }} {{ $object->ordered_at->some_date }}
Carbon::now()->addDays(15) //получить дату на 15 дней вперед
Ссылки откуда брал это всё
https://laravel.ru/posts/51 (IOC)
https://laravel.ru/posts/250 (ПостроительЗапросов)