Nulls

Laravel – гайд по выживанию


Скачать книгу

С учетом сказанного, в следующей теме мы рассмотрим все это вместе.

      3. Модели

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

      Что же такое модели?

      В Laravel модель – это PHP-класс, который управляет взаимодействием между кодом вашего приложения и базой данных. Расширение класса Laravel Eloquent Model позволяет сделать эти взаимодействия простыми и понятными.

      Модель Zombie

      Возьмем, к примеру, модель Zombie, которая будет размещена по адресу /app/Models/Zombie.php:

      <?php

      namespace App\Models;

      use Illuminate\Database\Eloquent\Model;

      class Zombie extends Model {

      protected $table = 'zombies';

      }

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

      zombies table

      Совет: Laravel автоматически управляет полями updated_at и created_at, если они существуют, регистрируя временные метки для новых добавленных строк и любых обновлений. Данные поля не нужно создавать. При написании миграции достаточно добавить timestamps(), но об этом позже.

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

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

Eloquent: ORM в Laravel

      Eloquent, ORM (Object-Relational Mapper) в Laravel, упрощает и украшает работу с базой данных. Вспомним код из предыдущего раздела:

      <?php

      use App\Models\Zombie;

      Route::get('/zombie/{id}', function($id){

      $zombie = Zombie::find($id);

      echo 'Name: ' . $zombie->name . '<br />';

      echo 'Strength: ' . $zombie->strength . '<br />'; echo 'Health: ' . $zombie->health . '<br />';

      });

      Если раньше наше приложение не могло найти класс Zombie, то с появлением модели мы можем обращаться к нему без проблем.

      Стоит отметить, что, вызывая Zombie, мы обращаемся именно к классу Zombie, расположенному по адресу App\Models\Zombie. Это понятие известно, как пространство имен, которое мы рассмотрим в одной из следующих глав.

      Тем не менее, препятствие все еще существует.

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

      <?php

      Route::get('/admin/zombies/create', function(){

      echo '<form method="POST" action="/admin/zombies/create">

      <input type="text" name="name" placeholder="Name"><br>

      <input type="text" name="strength" placeholder="Strength"><br>

      <input type="text" name="health" placeholder="Health"><br>

      <input type="hidden" name="_token" value="' . csrf_token() . '">

      <input type="submit" value="Create New Zombie">

      </form>';

      });

      При посещении этого маршрута в браузере (site.com/admin/zombies/create) отображается простая форма.

      При отправке формы данные публикуются в файл

      site.com/admin/zombies/create POST-маршрут, который должен выглядеть следующим образом:

      <?php

      Route::post('/admin/zombies/create', function () {

      //