Базовые методы CRUD контроллера для модели в Laravel

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

Вот несколько примеров методов, которые могут быть определены в модели:

  • create(array $attributes) : создает новую запись в таблице, используя переданные атрибуты. Например, $user = User::create(['name' => 'John', 'email' => 'john@example.com', 'password' => 'secret']);

  • update(array $attributes) : обновляет запись в таблице, используя переданные атрибуты. Например, $user->update(['name' => 'Jane']);

  • delete() : удаляет запись из таблицы. Например, $user->delete();

  • find($id) : находит запись в таблице по ее идентификатору. Например, $user = User::find(1);

  • where($column, $operator, $value) : находит записи в таблице, удовлетворяющие определенному условию. Например, $users = User::where('name', 'John')->get();

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

Пример CRUD контроллера

CRUD контроллер для модели Users в Laravel:

namespace App\Http\Controllers;

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

class UserController extends Controller
{
  /**
   * Отобразить список пользователей
   *
   * @return \Illuminate\Http\Response
   */
  public function index()
  {
    $users = User::all();
    return view('users.index', compact('users'));
  }

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

  /**
   * Сохранить нового пользователя в базу данных
   *
   * @param \Illuminate\Http\Request $request
   * @return \Illuminate\Http\Response
   */
  public function store(Request $request)
  {
    $user = new User();
    $user->name = $request->name;
    $user->email = $request->email;
    $user->password = bcrypt($request->password);
    $user->save();

    return redirect()->route('users.index')
      ->with('success', 'Пользователь успешно создан.');
  }

  /**
   * Отобразить информацию о пользователе
   *
   * @param int $id
   * @return \Illuminate\Http\Response
   */
  public function show($id)
  {
    $user = User::findOrFail($id);
    return view('users.show', compact('user'));
  }

  /**
   * Показать форму для редактирования пользователя
   *
   * @param int $id
   * @return \Illuminate\Http\Response
   */
  public function edit($id)
  {
    $user = User::findOrFail($id);
    return view('users.edit', compact('user'));
  }

  /**
   * Обновить информацию о пользователе в базе данных
   *
   * @param \Illuminate\Http\Request $request
   * @param int $id
   * @return \Illuminate\Http\Response
   */
  public function update(Request $request, $id)
  {
    $user = User::findOrFail($id);
    $user->name = $request->name;
    $user->email = $request->email;
    if ($request->password != '') {
      $user->password = bcrypt($request->password);
    }
    $user->save();

    return redirect()->route('users.index')
      ->with('success', 'Пользователь успешно обновлен.');
  }

  /**
   * Удалить пользователя из базы данных
   *
   * @param int $id
   * @return \Illuminate\Http\Response
   */
  public function destroy($id)
  {
    $user = User::findOrFail($id);
    $user->delete();

    return redirect()->route('users.index')
      ->with('success', 'Пользователь успешно удален.');
  }
}

Этот контроллер обрабатывает запросы для отображения, создания, редактирования и удаления пользователей в приложении Laravel. Вам, вероятно, понадобится создать соответствующие представления (views) для каждого из методов контроллера, чтобы пользователь мог взаимодействовать с вашим приложением.

Представления (views)

Представления (views) в Laravel используются для отображения данных на экране пользователю. Они содержат HTML код, который определяет структуру и содержание веб-страницы, а также специальные директивы для вставки динамических данных.

В Laravel, представления хранятся в директории resources/views , а файлы представлений имеют расширение .blade.php . Это связано с тем, что в Laravel используется шаблонизатор Blade, который позволяет вставлять PHP код в HTML, используя синтаксис фигурных скобок {{ }} и @php .

Каждый метод контроллера обычно возвращает представление, которое будет отображаться пользователю. Например, метод index в контроллере Users, который мы рассмотрели в предыдущем ответе, возвращает представление users.index с помощью функции view() . Это означает, что Laravel будет искать файл index.blade.php в директории resources/views/users .

Вот пример простого представления, которое выводит список пользователей:

<!-- resources/views/users/index.blade.php -->

@extends('layouts.app')

@section('content')
  <h1>Пользователи</h1>

  <table>
    <thead>
      <tr>
        <th>Имя</th>
        <th>Email</th>
        <th>Действия</th>
      </tr>
    </thead>
    <tbody>
      @foreach ($users as $user)
        <tr>
          <td>{{ $user->name }}</td>
          <td>{{ $user->email }}</td>
          <td>
            <a href="{{ route('users.show', $user->id) }}">Просмотреть</a>
            <a href="{{ route('users.edit', $user->id) }}">Редактировать</a>
            <form action="{{ route('users.destroy', $user->id) }}" method="POST">
              @csrf
              @method('DELETE')
              <button type="submit">Удалить</button>
            </form>
          </td>
        </tr>
      @endforeach
    </tbody>
  </table>
@endsection

В этом примере мы используем директиву @extends для указания того, что это представление наследует шаблон layouts.app . Затем мы используем директиву @section для определения блока контента, который будет вставлен в шаблон.

Внутри блока контента мы используем цикл @foreach для перебора всех пользователей и вывода их имени и email в таблицу. Мы также используем директивы @csrf и @method для защиты от подделки межсайтовых запросов (CSRF) и указания метода HTTP (DELETE), который будет использоваться при удалении пользователя.

Наконец, мы используем функции route() и {{ }} для генерации ссылок на другие страницы приложения и вставки динамических данных (например, имя пользователя) в HTML код.

Кроме того, в Laravel есть возможность использовать компоненты для повторяющихся элементов интерфейса, например, навигационное меню или форму для создания новых пользователей. Компоненты можно определять в отдельных файлах и использовать их в представлениях с помощью директивы @component.

Например, вот пример компонента для отображения навигационного меню:

<!-- resources/views/components/navbar.blade.php -->

<nav>
    <ul>
        <li><a href="/">Главная</a></li>
        <li><a href="{{ route('users.index') }}">Пользователи</a></li>
        <li><a href="{{ route('logout') }}">Выйти</a></li>
    </ul>
</nav>

Мы можем использовать этот компонент в других представлениях с помощью директивы @component:

<!-- resources/views/users/index.blade.php -->

@extends('layouts.app')

@section('content')
    @component('components.navbar')
    @endcomponent

    <h1>Пользователи</h1>

    <!-- ... -->
@endsection

Таким образом, использование представлений и компонентов в Laravel позволяет упростить создание интерфейса и повторно использовать код, что может существенно ускорить разработку веб-приложений.

Статьи по теме Как создать модель Laravel

Комментарии (0)

  1. Напишите первый комментарий
*Комментарий будет опубликован после проверки модератором

Похожие статьи

Загрузка изображения в Laravel

Русификация Laravel

Добавить поле к существующей таблице Laravel

Как поменять язык в Faker

Транслитерация URL в Laravel. Примеры str_slug()

Разработка бота Telegram с помощью Botman на локальном компьютере

Валидация данных в Laravel form request

Laravel Excel - Базовый экспорт

Добавить в botman editMessageText для Telegram

Как сделать middleware в Laravel 6 - простой пример

Laravel: Отношения моделей многие ко многим - belongsToMany

Laravel: Отношения моделей один ко многим - hasMany, belongsTo

Как русифицировать или поменять шаблон уведомления о сбросе пароля в Laravel

Создать ссылку на storage из внешнего каталога для Laravel

Установить Laravel в отдельную папку (site.ru/laravel/)

Валидация номера кредитной карты на PHP (Laravel)

Создание form request в Laravel: руководство для начинающих

Связать папку storage с папкой public в Laravel

Экспорт маршрутов из Laravel в JSON файл

Откуда в Laravel Jetstream (inertia) prop auth.user?

Обработка ошибок в Laravel form request

Постраничная навигация на Bootstrap в Laravel 8

Blade - расширить @section с использованием директивы @parent

Добавить данные об авторизации при каждом запросе к API в Laravel

Работа с файлами в Laravel Form Request

Работа с вложенными объектами и коллекциями в Laravel form request

Laravel: Отношение через таблицу-посредника - hasOneThrough()

Стандартные свойства модели в Laravel

Laravel: Отношения моделей один к одному - hasOne, belongsTo

Laravel: Отношение через таблицу-посредника - hasManyThrough()

Авторизацией и аутентификация в Laravel form request

Установка Laravel и создание нового проекта

Создание уникального индекса в миграции Laravel

Laravel form request для создания API-запросов

Настройка команды CRON на хостинге nic.ru для активации Laravel schedule

HTTP-запросы в Laravel form request - работа с различными типами запросов

Создание класса модели в Laravel

Создание таблицы в базе данных (миграции) для модели в Laravel

Как создать модель в Laravel

Базовые методы CRUD контроллера для модели в Laravel

Наш сайт использует куки, нажмите «ОК» если вы не против
OK