Урок 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 - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.
Программы на заказ
Отзывы
Контакты