Урок 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 - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.
Читайте также:
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.