Laravel 8 crud application tutorial from scratch

Symfony. Быстрый старт // Бесплатный вебинар OTUS

10719

209

8

01:39:24

10.06.2020

На вебинаре мы познакомимся с фреймворком Symfony
Рассмотрим его сильные и слабые стороны.
Ответим на вопрос, в каких случаях лучше использовать Symfony, а когда лучше подойдет другой фреймворк.
А также на мы разработаем небольшое веб-приложение на Symfony.

«Symfony Framework» — 🤍

Преподаватель: Михаил Каморин — программирует более 19 лет, 10 лет — в B2B-разработке, последний год — в B2C. На PHP программирует 8 лет, из них 3 года на Laravel, 2 года на Symfony.

Подключайтесь к обсуждению в чате — 🤍

Пройдите опрос по итогам мероприятия — 🤍

Следите за новостями проекта:

— Facebook: 🤍
— Telegram: 🤍
— ВКонтакте: 🤍
— LinkedIn: 🤍
— Хабр: 🤍

Удаление моделей

Чтобы удалить модель, вызовите метод для экземпляра модели:

Удаление существующей модели по ключу

В приведенном выше примере мы извлекаем модель из базы данных перед вызовом метода. Однако, если вы знаете первичный ключ модели, вы можете удалить модель, не вызывая ее, вызвав метод. В дополнение к одному первичному ключу в качестве аргумента, метод будет принимать несколько первичных ключей, массив первичных ключей или коллекцию первичных ключей:

Удаление моделей по запросу

Вы также можете запустить оператор удаления для набора моделей. В этом примере мы удалим все рейсы, помеченные как неактивные. Как и при массовых обновлениях, при массовом удалении не будут запускаться события модели для удаляемых моделей:

Мягкое удаление

В дополнение к фактическому удалению записей из вашей базы данных, Eloquent также может «мягко удалять» модели. Когда модели мягко удаляются, они фактически не удаляются из вашей базы данных. Вместо этого атрибут устанавливается на модель и вставляется в базу данных. Если модель имеет ненулевое значение, она была удалена. Чтобы включить мягкое удаление для модели, используйте черту на модели:

Вы также должны добавить столбец в таблицу базы данных. Конструктор схемыLaravel содержит вспомогательный метод для создания этого столбца:

Теперь, когда вы вызываете метод для модели, в столбце будут установлены текущие дата и время. И, при запросе модели, которая использует мягкое удаление, мягко удаленные модели будут автоматически исключены из всех результатов запроса.

Чтобы определить, был ли данный экземпляр модели удален, используйте метод:

Запрос мягких удаленных моделей

Включая мягко удаленные модели

Как отмечалось выше, мягко удаленные модели будут автоматически исключены из результатов запроса. Однако вы можете принудительно отобразить удаленные модели в наборе результатов, используя метод запроса:

Способ также может быть использован на отношения запроса:

Восстановление мягко удаленных моделей

Иногда вы можете захотеть «удалить» мягко удаленную модель. Чтобы восстановить мягко удаленную модель в активное состояние, используйте метод для экземпляра модели:

Вы также можете использовать метод в запросе для быстрого восстановления нескольких моделей. Опять же, как и другие «массовые» операции, это не вызовет никаких событий модели для восстанавливаемых моделей:

Как и метод, метод также может быть использован для отношений :

Удаление моделей без возможности восстановления

Иногда вам может понадобиться действительно удалить модель из вашей базы данных. Чтобы окончательно удалить мягко удаленную модель из базы данных, используйте метод:

Решение

Есть ли у вас, ребята, умный и простой способ приготовить сырое мясо в рамках Laravel?

Горячий, чтобы сделать грубый в laravel легким И быстрым, я сделаю небольшой шаг на официальном сайте laravel, но я не понимаю. Пожалуйста, дайте мне знать о простых шагах, которые я понимаю. Спасибо.

У меня есть небольшой тотализатор, это может помочь вам!

//////////// ФУНДАМЕНТАЛЬ ////////////

  1. Создать проект LARAVEL
    композитор создание-проект — prefer-dist laravel / аэропорт laravel

  2. Создать базу данных в PhpMyAdmin

  3. Откройте файл проекта в cmd / powerShell

  4. Создать таблицу с php artisan
    php ремесленник делает: миграция create_flight_table

  5. Откройте ваш текстовый редактор и отредактируйте .окр

    DB_CONNECTION = MySQL

    DB_HOST = локальный

    DB_DATABASE = аэропорт

    DB_USERNAME = корень

    DB_PASSWORD =

  6. Перейдите в базу данных папок> миграция, удалите таблицу пользователей и паролей, откройте файл flight_table и отредактируйте

общественная функция вверх ()

  1. Перенос таблицы в cmd или powerShell

    php ремесленник мигрировать

  2. Проверьте свою таблицу в PhpMyAdmin

================================================== ============================

//////////// КОНТРОЛЛЕР С ВИДОМ МОДЕЛИ ////////////

  1. Создать модель в CMD или PowerShell

    php artisan make: модель Tower

    защищенная таблица $ = ‘полеты’;

  2. Создать представление в папке ресурсы> виды

    создать новую папку под названием ангар

    создать index.blade.php

    создать edit.blade.php

    создать create.blade.php

  3. Создать контроллер в cmd или powerShell

    php artisan make: контроллер flightController —resource

  4. Откройте и отредактируйте свой контроллер

использовать приложение \ модель;

индекс публичной функции ()

  1. Зайдите в папку маршруты, откройте и отредактируйте web.php

    Route :: resource (‘main’, ‘flightController’);

  2. Вставить данные в PhpMyAdmin

  3. Откройте и отредактируйте ваш index.blade

СОЗДАЙТЕ

@foreach ($ var as $ var)

@endforeach

  1. Запустите эту команду в cmd или powerShell

    подача ремесленника php

  2. копировать вставить это

//////////// CRUD ////////////

//////////// СОЗДАЙТЕ ////////////

  1. Откройте и отредактируйте свой контроллер

публичная функция create ()

  1. Откройте и отредактируйте create.blade.php

@if (COUNT ($ ошибок)> 0)

@endif

  1. Открыть и редактировать контроллер

магазин публичных функций (Request $ request)

================================================== ============================

//////////// ОБНОВИТЬ ////////////

  1. Открыть и редактировать контроллер

редактирование публичной функции ($ id)

  1. Откройте и отредактируйте edit.blade

@if (COUNT ($ ошибок)> 0)

@endif

id}} «method =» post «>

plane}} «placeholder =» plane «>

авиакомпания}} «заполнитель =» Авиакомпания «>

  1. Открыть и редактировать контроллер

обновление публичной функции (Request $ request, $ id)

  1. Откройте и отредактируйте index.blade

id}} / edit «> РЕДАКТИРОВАТЬ

================================================== ============================

//////////// УДАЛЯТЬ ////////////

  1. Открыть и редактировать контроллер

публичная функция destroy ($ id)

  1. Откройте и отредактируйте index.blade

id}} «method =» post «>

//////////// КОНЕЦ ////////////

Валидация и ошибки

Для того чтобы организовать валидацию подключите в контроллере класс валидации

use Illuminate\Foundation\Validation\ValidatesRequests;

Затем внутри класса контроллера укажите глобальное использование класса валидации

class NoteController extends Controller
{
    use ValidatesRequests;

Теперб внутри нашего метода Store можно использовать вот такой простой набор валидаций:

public function store(Request $request)
{
    $this->validate($request, );

Осталось лишь в вывести в шаблоне блок с ошибками например в лайоуте, что бы они были доступны во всех шаблонах:

@if($errors->any())
    <div class="alert alert-danger">
        <ul>
            @foreach($errors->all() as $error)
                <li>{{$error}}</li>
            @endforeach
        </ul>
    </div>
@endif

Отображение ошибок валидации

Laravel автоматически перенаправляет пользователя на предыдущую страницу. Кроме того, все ошибки валидации будут автоматически перенесены во флеш-переменные сессии.

Обратите внимание, что нам не нужно специально привязывать сообщения об ошибках к шаблону в нашем маршруте GET. Это потому, что Laravel будет проверять наличие ошибок в данных сессий и автоматически привязывать их к шаблону, если они доступны

В представлении, ошибки из сессий, доступны через переменную $errors.

Проверяем, существуют ли ошибки в сессии, и выводим их на экран. Данный код добавляем внутри файла create.blade.php, в том месте где хотим, чтобы отображались ошибки.

Create Views

Create a Folder inside the resources-views

inside the views folder create the contacts folder

In Laravel you have create the pages using pagename.blade.php

Create page layout.blade.php

<!DOCTYPE html>
<html>
<head>
<title>Contact Laravel 8 CRUD</title>
<link href=»https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css» rel=»stylesheet» integrity=»sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3″ crossorigin=»anonymous»>
</head>
<body>

<div class=»container»>
@yield(‘content’)
</div>

</body>
</html>

1
2
3
4
5
6
7
8
9
10
11
12
13
14

<!DOCTYPE html>

<html>

<head>

<title>Contact Laravel8CRUD<title>

<link href=»https://cdn.jsdelivr.net/npm//dist/css/bootstrap.min.css»rel=»stylesheet»integrity=»sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3″crossorigin=»anonymous»>

<head>

<body>

<div class=»container»>

@yield(‘content’)

<div>

<body>

<html>

Create page index.blade.php

@extends(‘contacts.layout’)
@section(‘content’)
<div class=»container»>
<div class=»row»>

<div class=»col-md-9″>
<div class=»card»>
<div class=»card-header»>Contacts</div>
<div class=»card-body»>
<a href=»{{ url(‘/contact/create’) }}» class=»btn btn-success btn-sm» title=»Add New Contact»>
<i class=»fa fa-plus» aria-hidden=»true»></i> Add New
</a>
<br/>
<br/>
<div class=»table-responsive»>
<table class=»table»>
<thead>
<tr>
<th>#</th>
<th>Name</th>
<th>Address</th>
<th>Telephone</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
@foreach($contacts as $item)
<tr>
<td>{{ $loop->iteration }}</td>
<td>{{ $item->name }}</td>
<td>{{ $item->address }}</td>
<td>{{ $item->mobile }}</td>

<td>
<a href=»{{ url(‘/contact/’ . $item->id) }}» title=»View Student»><button class=»btn btn-info btn-sm»><i class=»fa fa-eye» aria-hidden=»true»></i> View</button></a>
<a href=»{{ url(‘/contact/’ . $item->id . ‘/edit’) }}» title=»Edit Student»><button class=»btn btn-primary btn-sm»><i class=»fa fa-pencil-square-o» aria-hidden=»true»></i> Edit</button></a>

<form method=»POST» action=»{{ url(‘/contact’ . ‘/’ . $item->id) }}» accept-charset=»UTF-8″ style=»display:inline»>
{{ method_field(‘DELETE’) }}
{{ csrf_field() }}
<button type=»submit» class=»btn btn-danger btn-sm» title=»Delete Contact» onclick=»return confirm(&quot;Confirm delete?&quot;)»><i class=»fa fa-trash-o» aria-hidden=»true»></i> Delete</button>
</form>
</td>
</tr>
@endforeach
</tbody>
</table>
</div>

</div>
</div>
</div>
</div>
</div>
@endsection

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55

@extends(‘contacts.layout’)

@section(‘content’)

<div class=»container»>

<div class=»row»>

<div class=»col-md-9″>

<div class=»card»>

<div class=»card-header»>Contacts<div>

<div class=»card-body»>

<ahref=»{{ url(‘/contact/create’) }}»class=»btn btn-success btn-sm»title=»Add New Contact»>

<iclass=»fa fa-plus»aria-hidden=»true»><i>Add New

<a>

<br>

<br>

<div class=»table-responsive»>

<table class=»table»>

<thead>

<tr>

<th>#</th>

<th>Name<th>

<th>Address<th>

<th>Telephone<th>

<th>Actions<th>

<tr>

<thead>

<tbody>

@foreach($contacts as$item)

<tr>

<td>{{$loop->iteration}}<td>

<td>{{$item->name}}<td>

<td>{{$item->address}}<td>

<td>{{$item->mobile}}<td>

<td>

<ahref=»{{ url(‘/contact/’ . $item->id) }}»title=»View Student»><button class=»btn btn-info btn-sm»><iclass=»fa fa-eye»aria-hidden=»true»><i>View<button><a>

<ahref=»{{ url(‘/contact/’ . $item->id . ‘/edit’) }}»title=»Edit Student»><button class=»btn btn-primary btn-sm»><iclass=»fa fa-pencil-square-o»aria-hidden=»true»><i>Edit<button><a>

<form method=»POST»action=»{{ url(‘/contact’ . ‘/’ . $item->id) }}»accept-charset=»UTF-8″style=»display:inline»>

{{method_field(‘DELETE’)}}

{{csrf_field()}}

<button type=»submit»class=»btn btn-danger btn-sm»title=»Delete Contact»onclick=»return confirm(&quot;Confirm delete?&quot;)»><iclass=»fa fa-trash-o»aria-hidden=»true»><i>Delete<button>

<form>

<td>

<tr>

@endforeach

<tbody>

<table>

<div>

<div>

<div>

<div>

<div>

<div>

@endsection

Определение моделей

Для начала давайте создадим модель Eloquent. Модели обычно находятся в каталоге, но вы можете разместить их в любом месте, которое может быть автоматически загружено в соответствии с вашим файлом. Все модели Eloquent расширяют класс.

Самый простой способ создать экземпляр модели — использовать команду Artisan :

Если вы хотите создать миграцию базы данных при создании модели, вы можете использовать опцию или :

Красноречивые модельные соглашения

Теперь давайте рассмотрим пример модели, которую мы будем использовать для извлечения и хранения информации из нашей таблицы базы данных:

Имена таблиц

Обратите внимание, что мы не указали Eloquent, какую таблицу использовать для нашей модели. По соглашению, «случай змеи», имя класса во множественном числе будет использоваться в качестве имени таблицы, если явно не указано другое имя. Таким образом, в этом случае Eloquent предполагает, что модель хранит записи в таблице. Вы можете указать пользовательскую таблицу, определив свойство в вашей модели:

Основные ключи

Eloquent также предполагает, что каждая таблица имеет столбец первичного ключа с именем . Вы можете определить защищенное свойство, чтобы переопределить это соглашение:

Кроме того, Eloquent предполагает, что первичный ключ является возрастающим целочисленным значением, что означает, что по умолчанию первичный ключ будет автоматически приведен к . Если вы хотите использовать неинкрементный или нечисловой первичный ключ, вы должны установить открытое свойство вашей модели :

Если ваш первичный ключ не является целым числом, вы должны установить для защищенного свойства вашей модели :

Timestamps

По умолчанию, Красноречивым ожидает и столбцов существовать на ваших столах. Если вы не хотите, чтобы Eloquent автоматически управлял этими столбцами, установите для свойства вашей модели :

Если вам нужно настроить формат ваших временных меток, установите свойство для вашей модели. Это свойство определяет, как атрибуты даты хранятся в базе данных, а также их формат при сериализации модели в массив или JSON:

Если вам необходимо настроить имена столбцов , используемых для хранения временных меток, вы можете установить и константы в модели:

Подключение к базе данных

По умолчанию все модели Eloquent будут использовать соединение с базой данных по умолчанию, настроенное для вашего приложения. Если вы хотите указать другое соединение для модели, используйте свойство:

Если вы хотите определить значения по умолчанию для некоторых атрибутов вашей модели, вы можете определить свойство вашей модели:

Show Records

Create page show.blade.php

@extends(‘contacts.layout’)
@section(‘content’)

<div class=»card»>
<div class=»card-header»>Contactus Page</div>
<div class=»card-body»>

<div class=»card-body»>
<h5 class=»card-title»>Name : {{ $contacts->name }}</h5>
<p class=»card-text»>Address : {{ $contacts->address }}</p>
<p class=»card-text»>Phone : {{ $contacts->mobile }}</p>
</div>

</hr>

</div>
</div>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

@extends(‘contacts.layout’)

@section(‘content’)

<div class=»card»>

<div class=»card-header»>Contactus Page<div>

<div class=»card-body»>

<div class=»card-body»>

<h5 class=»card-title»>Name{{$contacts->name}}<h5>

<pclass=»card-text»>Address{{$contacts->address}}<p>

<pclass=»card-text»>Phone{{$contacts->mobile}}<p>

<div>

<hr>

<div>

<div>

Controller

After that Pass All view pages through Controller. you have to add the Model namespace here

use App\Models\Contact;   Data is coming from the database via Model.

<?php

namespace App\Http\Controllers;
use App\Models\Contact;
use Illuminate\Http\Request;

class ContactController extends Controller
{

public function index()
{
$contacts = Contact::all();
return view (‘contacts.index’)->with(‘contacts’, $contacts);
}

public function create()
{
return view(‘contacts.create’);
}

public function store(Request $request)
{
$input = $request->all();
Contact::create($input);
return redirect(‘contact’)->with(‘flash_message’, ‘Contact Addedd!’);
}

public function show($id)
{
$contact = Contact::find($id);
return view(‘contacts.show’)->with(‘contacts’, $contact);
}

public function edit($id)
{
$contact = Contact::find($id);
return view(‘contacts.edit’)->with(‘contacts’, $contact);
}

public function update(Request $request, $id)
{
$contact = Contact::find($id);
$input = $request->all();
$contact->update($input);
return redirect(‘contact’)->with(‘flash_message’, ‘Contact Updated!’);
}

public function destroy($id)
{
Contact::destroy($id);
return redirect(‘contact’)->with(‘flash_message’, ‘Contact deleted!’);
}
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59

<?php

namespaceApp\Http\Controllers;

useApp\Models\Contact;

useIlluminate\Http\Request;

classContactControllerextendsController

{

publicfunctionindex()

{

$contacts=Contact::all();

returnview(‘contacts.index’)->with(‘contacts’,$contacts);

}

publicfunctioncreate()

{

returnview(‘contacts.create’);

}

publicfunctionstore(Request$request)

{

$input=$request->all();

Contact::create($input);

returnredirect(‘contact’)->with(‘flash_message’,’Contact Addedd!’);

}

publicfunctionshow($id)

{

$contact=Contact::find($id);

returnview(‘contacts.show’)->with(‘contacts’,$contact);

}

publicfunctionedit($id)

{

$contact=Contact::find($id);

returnview(‘contacts.edit’)->with(‘contacts’,$contact);

}

publicfunctionupdate(Request$request,$id)

{

$contact=Contact::find($id);

$input=$request->all();

$contact->update($input);

returnredirect(‘contact’)->with(‘flash_message’,’Contact Updated!’);

}

publicfunctiondestroy($id)

{

Contact::destroy($id);

returnredirect(‘contact’)->with(‘flash_message’,’Contact deleted!’);

}

}

Routes

Pages are Manage through routes. If you are crud system simple you can add it the routes one line look like this

Route::resource(‘/contact’, ContactController::class);

You have to add the ControllerNameSpace

use App\Http\Controllers\ContactController;

<?php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\ContactController;

Route::get(‘/’, function () {
return view(‘welcome’);
});

Route::resource(‘/contact’, ContactController::class);

1
2
3
4
5
6
7
8
9
10
11

<?php

useIlluminate\Support\Facades\Route;

useApp\Http\Controllers\ContactController;

Route::get(‘/’,function(){

returnview(‘welcome’);

});

Route::resource(‘/contact’,ContactController::class);

Валидация формы в Laravel

Первый шаг – установите последнею версию Laravel с помощью следующей команды.

Используемая версия Laravel на момент написания статьи 5.8.

        composer create-project --prefer-dist laravel/laravel blog
    

Перейдите в папку проекта и откройте его в вашем IDE или редакторе кода.

Теперь создайте базу данных MySQL, а также подключите её к Laravel. Укажите данные для подключения к базе данных в файле .env.

        DB_CONNECTION=mysql
        DB_HOST=127.0.0.1
        DB_PORT=3306
        DB_DATABASE=blog
        DB_USERNAME=root
        DB_PASSWORD=root
    

Создайте файл FormController.php, используя следующую команду.

        php artisan make:controller FormController
    

Создайте два метода внутри файла FormController.php.

        <?php

        // FormController.php

        namespace App\Http\Controllers;

        use Illuminate\Http\Request;

        class FormController extends Controller
        {
            public function create()
            {

            }

            public function store(Request $request)
            {
                
            }
        }

    

Теперь напишите два маршрута в файле routes/web.php.

        // web.php
        Route::get('form', 'FormController@create')->name('form.create');
        Route::post('form', 'FormController@store')->name('form.store');
    

Создайте модель и файл миграции, используя следующую команду.

        php artisan make:model Form -m
    

Напишите следующий код в файле миграции _create_forms_table.php, который находится в папке database/migrations.

        // create_forms_table.php

        public function up()
        {
                Schema::create('forms', function (Blueprint $table) {
                    $table->bigIncrements('id');
                    $table->string('item_name');
                    $table->string('sku_no');
                    $table->integer('price');
                    $table->timestamps();
                });
        }

    

Теперь, для того чтобы создать таблицу, запустите миграции командой:

        php artisan migrate
    

Также, чтобы предотвратить исключение массового присвоения, добавьте свойство $fillable, внутри модели Form.

    <?php

        // Form.php

        namespace App;

        use Illuminate\Database\Eloquent\Model;

        class Form extends Model
        {
            protected $fillable = ;
        }

    

Внутри папки resources/views, создайте файл layout.blade.php и добавьте в него следующий код.

        <!DOCTYPE html>
        <html lang="en">
        <head>
          <meta charset="utf-8">
          <meta name="viewport" content="width=device-width, initial-scale=1.0">
          <meta http-equiv="X-UA-Compatible" content="ie=edge">
          <title>Laravel Form Validation Example Tutorial</title>
          <link href="{{ asset('css/app.css') }}" rel="stylesheet" type="text/css" />
        </head>
        <body>

          <div class="container">
            @yield('content')
          </div>
          
          <script src="{{ asset('js/app.js') }}" type="text/js"></script>

        </body>
        </html>
    

Теперь в той же папке resources/views создайте файл с именем create.blade.php и добавьте в него следующий код.

        

        @extends('layout')

        @section('content')
        <style>
          .uper {
            margin-top: 40px;
          }
        </style>
        <div class="card uper">
          <div class="card-header">
            Add Item
          </div>
          <div class="card-body">
            @if ($errors->any())
              <div class="alert alert-danger">
                <ul>
                    @foreach ($errors->all() as $error)
                      <li>{{ $error }}</li>
                    @endforeach
                </ul>
              </div><br />
            @endif
              <form method="post" action="{{ route('form.store') }}">
                  <div class="form-group">
                      @csrf
                      <label for="name">Item Name:</label>
                      <input type="text" class="form-control" name="item_name"/>
                  </div>
                  <div class="form-group">
                      <label for="price">SKU Number :</label>
                      <input type="text" class="form-control" name="sku_no"/>
                  </div>
                  <div class="form-group">
                      <label for="quantity">Item Price :</label>
                      <input type="text" class="form-control" name="price"/>
                  </div>
                  <button type="submit" class="btn btn-primary">Create Item</button>
              </form>
          </div>
        </div>
        @endsection
    

Теперь, внутри контроллера FormController.php напишите функцию create().

        // FormController.php

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

    

Запускаем команду:

        php artisan serve
    

И теперь Вы можете получить доступ к форме по этому адресу: http://localhost:8000/form .

Логика поиска

Создадим контроллер, который будет принимать запрос, передавать его на сервис поиска, где будет основная логика, и возвращать «вьюху» с нужными нам данными:

Сервис будет выглядеть примерно так:

Elasticsearch уже возвращает результат по релевантности, в методе buildCollection берем все id записей, и сортируем их в запросе в том же порядке, как вернул эластик.

После всего проделанного, страница результата поиска будет выглядеть примерно так:

Как видно на скриншоте, в результате поиска мы получили разные варианты записей, где присутствует слово «витамины» с учетом ошибок и разных окончаний слов.

Скорость выполнения такого запроса будет где-то 80-150 миллисекунд:

А теперь заменим в нашем контроле поиск с эластика на классический title like ‘%витамины%’ и посмотрим скорость такого запроса:

82 секунды!!! Многовато, и ни один нормальный человек не будет ждать результатов поиска, ну и сам результат будет без учета ошибок.

P.S. Это была реализация базового поиска, так сказать «Elastic для чайников».

В следующей статье рассмотрим агрегацию данных, что очень важно, для любого e-commerce проекта

Шаг 5: Создайте контроллер

Теперь вам нужно создать контроллер, просто добавив указанную ниже команду, и сгенерировать новый контроллер ресурсов – PostController.

php artisan make:controller PostController --resource

После выполнения данной команды вы найдете новый файл по следующему пути: «app / Http / Controllers / PostController.php». Там вы увидите уже сформированные методы, такие как показано ниже. Теперь вам нужно добавить следующие коды в ваши функции:

1) index() => этот метод предоставляет вам все данные из базы данных.

2) create() => это метод для создания новой записи.

3) store() => этот метод хранит данные в вашей базе данных.

3) show() => этот метод показывает запись.

3) edit() => используя этот метод, мы можем отредактировать нашу запись.

3) update() => это метод для обновления записи.

7) destroy() => используя этот метод, мы можем удалить нашу запись.

Теперь откройте файл PostController.php и добавьте в него приведенный ниже код.

app/Http/Controllers/PostController.php

<?php

namespace App\Http\Controllers;

use App\Models\Post;
use Illuminate\Http\Request;

class PostController extends Controller
{
    /**
     * Отображает список ресурсов
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $posts = Post::all();

        return view('posts.index', compact('posts'));
    }

    /**
     * Выводит форму для создания нового ресурса
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
       return view('posts.create');
    }

    /**
     * Помещает созданный ресурс в хранилище
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        $request->validate();

        Post::create($request->all());

        return redirect()->route('posts.index')->with('success','Post created successfully.');
    }

    /**
     * Отображает указанный ресурс.
     *
     * @param  \App\Models\Post  $post
     * @return \Illuminate\Http\Response
     */
    public function show(Post $post)
    {
      return view('posts.show',compact('post'));
    }

    /**
     * Выводит форму для редактирования указанного ресурса
     *
     * @param  \App\Models\Post  $post
     * @return \Illuminate\Http\Response
     */
    public function edit(Post $post)
    {
        return view('posts.edit',compact('post'));
    }

    /**
     * Обновляет указанный ресурс в хранилище
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \App\Models\Post  $post
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, Post $post)
    {
        $request->validate();

        $post->update($request->all());

        return redirect()->route('posts.index')->with('success','Post updated successfully');
    }

    /**
     * Удаляет указанный ресурс из хранилища
     *
     * @param  \App\Models\Post  $post
     * @return \Illuminate\Http\Response
     */
    public function destroy(Post $post)
    {
      $post->delete();

       return redirect()->route('posts.index')
                       ->with('success','post deleted successfully');
    }
}

Create Migration

As we are going to create CRUD (Create, Read, Update, Delete) application in laravel. So let’s take an example as product.

Here we have to create a migration which creates a products table.

After running this command at your terminal, you will see one file will be created at this following path /database/migrations.

Open {timestamp}_create_products_table.php file and write this complete code into it.

<?php
  
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
  
class CreateProductsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('products', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->integer('amount');
            $table->text('description');
            $table->timestamps();
        });
    }
  
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('products');
    }
}

Now, you have to run this given command to migrate the above file.

Above command will creates a products table in database.

Laravel 6 Beginner — e9 — RESTful Controllers Part 1

34970

521

37

00:18:09

24.09.2019

RESTful Controllers help guide your development process and give you guidelines on how to implement your CRUD actions. Let’s take it one step at a time implementing and adding the concept customers into our application.

For the best experience, follow along in our interactive school at 🤍

Laravel RESTful Controllers
🤍

DigitalOcean Referral
🤍

About This Course

If you have been looking to learn Laravel, there hasn’t been a better time. The framework reached an important point in its life, with the release of Laravel 6. There has never been more demand for Laravel developers than now. In this series, we are going to get you started in your path to becoming a Laravel Artisan. Let’s get right to it!

Coder’s Tape

Create a Model and Migration in Laravel 8

In this CRUD application, I will work on the Article for applying the CRUD operations. So, I will create a model and migration for the Article.

The above command will create a model and the migration file for the Article.


Create a Model and Migration For Article

When the model has been created, you will see the new feature of the Laravel 8 inside the folder structure. This time you will find a separate folder for the Models. And every model will be placing inside this Models folder. So, this is very interesting.


Laravel 8 Folder Structure

The migration file for the article has been added inside the database/migrations folder as well.

So, in the create_articles_table migration, we will add some fields.

Now, we have the schema for the articles table. Therefore, let’s migrate it inside the database.

The above command will generate the tables for the specified migrations in the database.


Migrate tables in database

Once the tables has been created. Now, let’s add the fillable data in the article model.

Рейтинг
( Пока оценок нет )
Editor
Editor/ автор статьи

Давно интересуюсь темой. Мне нравится писать о том, в чём разбираюсь.

Понравилась статья? Поделиться с друзьями:
Люкс-хост
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: