img

Admin

Использование 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')

Встроенные инструменты

 class=

Именования

 class=

Можно лучше написать

$request->session()->get('cart');
$request->input('name');

Можно лучше

session('cart');
$request->name;
 class=

Создавать

Вместо 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://github.com/alexeymezenin/laravel-best-practices/blob/master/russian.md#%D0%A2%D0%BE%D0%BD%D0%BA%D0%B8%D0%B5-%D0%BA%D0%BE%D0%BD%D1%82%D1%80%D0%BE%D0%BB%D0%BB%D0%B5%D1%80%D1%8B-%D1%82%D0%BE%D0%BB%D1%81%D1%82%D1%8B%D0%B5-%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8 (ХОРОШИЕ ПРАКТИКИ)

https://laravel.ru/posts/51 (IOC)

https://laravel.ru/posts/250 (ПостроительЗапросов)

https://laravel.ru/docs/v5/errors (журналирование)

https://laravel.ru/docs/v5/views (про вьюшки)

guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии

СТАТЬИ БЛОГА ПО РУБРИКЕ И МЕТКАМ

img

Создание сервис контейнера laravel

без кода из скриншота сверху функция работать не будет app(‘exzample’)  или тогда надо написать app(‘AppExample’) А если написать dd(app(‘exzample’) , app(‘exzample’) ) то будут выводиться разные объекты Это пишем в web.рhp А это пишем в контроллере Возратит исключение, […]

Создание сервис контейнера laravel

без кода из скриншота сверху функция работать не будет app(‘exzample’)  или тогда надо написать app(‘AppExample’) А если написать dd(app(‘exzample’) , app(‘exzample’) ) то будут выводиться разные объекты Это пишем в web.рhp А это пишем в контроллере Возратит исключение, […]
img

Как обойтись без app.js для инстанса vue на laravel

Если по каким-то причинам не нужно, чтобы у какого-то компонента vue был отдельный инстенс на одной странице, то можно использовать только blade template с помощью подхода ниже

Как обойтись без app.js для инстанса vue на laravel

Если по каким-то причинам не нужно, чтобы у какого-то компонента vue был отдельный инстенс на одной странице, то можно использовать только blade template с помощью подхода ниже
img

Создание новой задачи на laravel

Установить отношение один ко многим в модели проектов Функция добавления новой задачи Вывод ошибок валидации в шаблоне Остальное как на видео Для лучшей инкапсуляции советуют по большой мере все операции с записями таблиц БД стараться […]

Создание новой задачи на laravel

Установить отношение один ко многим в модели проектов Функция добавления новой задачи Вывод ошибок валидации в шаблоне Остальное как на видео Для лучшей инкапсуляции советуют по большой мере все операции с записями таблиц БД стараться […]
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x