Блог программиста

Изучаем и разрабатываем что-то новое, делимся опытом.

Модель в Laravel

Система объектно-реляционного отображения (ORM) Eloquent - это реализация шаблона Active record в Laravel для работы с базами данных.

Обратимся к Википедии:

Active record (AR) — шаблон проектирования приложений ... является популярным способом доступа к данным реляционных баз данных в объектно-ориентированном программировании.

Короче: для каждой таблицы описываем соответствующий класс (его ещё называют модель), который в дальнейшем используем для работы с этой таблицей.

Создать модель можно с помощью команды artisan. Для этого переходим в папку нашего проекта blog и вызываем:

php artisan make:model Product -m

Мы создали модель для товара (первое, что пришло в голову =)).

Во-первых, в папке app создаётся файл Product.php следующего содержания:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Product extends Model
{
    //
}

Во-вторых, так как мы использовали опцию -m (можно использовать опцию --migration), мы создали миграцию (если миграция не нужна, опцию опускаем). У нас сгенерировался файл миграции 2018_12_19_071406_create_products_table в папке database/migrations:

Schema::create('products', function (Blueprint $table) {
	$table->increments('id');
	$table->timestamps();
});

Добавим поля name - название, price - цена, count - кол-во. Теперь схема миграции будет выглядеть так:

Schema::create('products', function (Blueprint $table) {
	$table->increments('id');
	$table->text('name');
	$table->float('price');
	$table->integer('count');
	$table->timestamps();
});

Вызываем команду:

php artisan migrate:refresh

В базе данных создаётся такая табличка:

Давайте выведем её. Добавим маршрут в файле routes/web.php:

Route::get('products', function () {
    $products = App\Product::all();
    return view('products', ['products' => $products]);
});

В файле resources/views/products.blade.php пропишем следующее:

foreach ($products as $item) {
	echo '<li>'.$item['name'].', '.$item['price'].', '.$item['count'].'</li>';
}

Отлично! Результат выводится на страничке, а значит, модель на Laravel уже работает!

Но это ещё не всё. Мы пока ещё ничего не делали с классом Product. Давайте добавим статическую функцию showAll():

class Product extends Model {
    static function showAll() {
        return static::all();
    }
}

Сделаем вызов в маршруте через эту функцию:

Route::get('products/all', function() {
    $products = App\Product::showAll();
    return view('products', ['products' => $products]);
});

А теперь мы хотим вывести страничку с отсортированными имени товарами. Пожалуйста. В web.php:

Route::get('products/sort', function() {
    $products = App\Product::showAlphabetically();
    return view('products', ['products' => $products]);
});

в класс Product добавим:

static function showAlphabetically() {
	return static::orderBy('name')->get();
}

Хотим вывести товары с количеством на складе более заданного.

В web.php:

Route::get('products/more/{value}', function($value) {
    $products = App\Product::showCountMore($value);
    return view('products', ['products' => $products]);
});

В классе Product:

static function showCountMore($value) {
	return static::where('count', '>', $value)->orderBy('name')->get();
}

И т.д..

На этом тему модели в Laravel для начинающих считаю раскрытой.


Отправить комментарий
Наши проекты
Cj - язык программирования (C++ & Javascript)
Новый язык программирования, для разработки веб, мобайл, десктоп-приложений, игр... подробнее...
Контакты
vk.com/sitev_ru
Skype: sitev.ru
E-mail: mike@sitev.ru
github.com/sitev

Рейтинг@Mail.ru

Besucherzahler
счетчик посещений