Урок 22. Введение в Eloquent модели


На этом и следующих нескольких уроках по Laravel мы создадим еще одно приложение. А сегодня давайте поговорим о создании моделей для laravel. Работать будем с такой вот таблицей products с полями

  • id (uint autoincrement)
  • art (артикул, string), уникальный индекс
  • name (string)
  • status (string "available"|"unavailable")
  • data (jsonb) - здесь хранить несколько полей на ваше усмотрение, например color и size
  • а также timestamps и soft deletes
Миграция для таблицы базы данных

Тут все просто, мы уже такое делали на прошлом уроке. Файл для миграции:

<?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('art', 255)->unique();
			$table->string('name', 255);
			$table->string('status', 255);
			$table->json('data');
			$table->integer('deleted');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('products');
    }
}
Модель

Eloquent модель Product, связанную с данной таблицей, создадим вот так:

php artisan make:model Product


Теперь у нас появился вот такой файл app\Models\Product.php

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Product extends Model
{
    use HasFactory;
}
По умолчанию он будет брать данные из таблицы products, используя дефолтный коннект с базой данных. Дальше давайте создадим контроллер MyProduct

php artisan make:controller MyProduct
Теперь у нас появится файл app\Http\Controllers\MyProduct.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class MyProduct extends Controller
{
    //
}
Немного изменим его:

<?php

namespace App\Http\Controllers;

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

class MyProduct extends Controller
{
    public function index(){
        $products = Product::all();
        return view('product', compact('products'));
    }
}
И еще в \resources\views\ создадим файл product.blade.php с таким кодом:

<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">

        <title>Laravel</title>

            body {
                font-family: 'Nunito', sans-serif;
            }
        </style>
    </head>
    <body class="antialiased">
        @foreach ($products as $product)
            <div>{{ $product->name }}</div>
        @endforeach
    </body>
</html>
Еще чуть не забыли прописать роут для нашей страницы в routes\web.php

Route::get('product', 'App\Http\Controllers\MyProduct@index');
Теперь попробуем добавить какой-нибудь товар через phpmyadmin например, чтобы убедиться, что все работает и перейдем на странице с выводом http://localhost/my_shop/public/product. Все должно заработать.

На следующих урокам мы на основе этого расширим функционал, реализуем добавление и удаление продуктов, вывод только доступных, валидацию и много другого интересного.
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.

тегистатьи IT, уроки по Laravel, laravel, модель, php




Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.




Замена задачи с сохранением конечного результата
Визуальное администрирование MySQL: phpMyAdmin и Workbench
Рецензия на книгу Стивена Кинга "Кто нашел, берет себе"