Доступ к готовым решениям

Переход в группу "Пользователь"

300.00 ₽
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Полное руководство по ORM Eloquent

markelov666

Умник
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!


Полное руководство по ORM Eloquent
​
Eloquent — это объектно-реляционное отображение (ORM), входящее в состав фреймворка Laravel. Оно предоставляет удобный, интуитивно понятный интерфейс для работы с базами данных, позволяет работать с таблицами через модели и использовать объектно-ориентированный подход для управления данными.


Основные понятия Eloquent

Модель
Модель — это класс, который соответствует таблице в базе данных. В Laravel модели обычно располагаются в директории app/Models. Например, модель User соответствует таблице users:
PHP:
namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    // Дополнительные свойства или методы модели
}

Настройка модели

Таблица
По умолчанию Eloquent предполагает, что имя таблицы совпадает с именем модели во множественном числе и в нижнем регистре. Например, для модели Post таблицей будет posts. Если требуется задать другое имя таблицы, используйте свойство $table:
PHP:
class Post extends Model
{
    protected $table = 'blog_posts';
}

Первичный ключ
Eloquent ожидает, что каждая таблица содержит поле id в качестве первичного ключа. Если имя или тип первичного ключа отличается, настройте его с помощью свойств $primaryKey, $incrementing и $keyType:
PHP:
class Post extends Model
{
    protected $primaryKey = 'post_id';
    public $incrementing = false;
    protected $keyType = 'string';
}


CRUD-операции в Eloquent

Создание записей

С помощью метода create
Метод create используется для массового заполнения полей. Для его работы необходимо определить свойство $fillable:
PHP:
class Post extends Model
{
    protected $fillable = ['title', 'content'];
}

Post::create([
    'title' => 'Мой первый пост',
    'content' => 'Вот содержание поста.'
]);

С использованием объекта модели
PHP:
$post = new Post();
$post->title = 'Еще один пост';
$post->content = 'Некоторый контент здесь.';
$post->save();

Чтение записей
Получение данных из базы осуществляется с помощью методов all, find, where, first и других:
PHP:
// Все записи
$posts = Post::all();

// Запись по ID
$post = Post::find(1);

// С условием
$posts = Post::where('title', 'like', '%Pawno-info%')->get();

// Первая запись
$post = Post::where('status', 'published')->first();

Обновление записей
С использованием метода update
PHP:
Post::where('id', 1)->update(['title' => 'Обновленный заголовок']);

С помощью объекта модели
PHP:
$post = Post::find(1);
$post->title = 'Заголовок, обновленный вручную';
$post->save();

Удаление записей
PHP:
// Удаление конкретной записи
$post = Post::find(1);
$post->delete();

// Удаление по условию
Post::where('status', 'draft')->delete();

// Удаление всех записей
Post::truncate();

Отношения между моделями
Один к одному (One-to-One)
PHP:
class User extends Model
{
    public function profile()
    {
        return $this->hasOne(Profile::class);
    }
}

class Profile extends Model
{
    public function user()
    {
        return $this->belongsTo(User::class);
    }
}

// Пример использования
$user = User::find(1);
$profile = $user->profile;

Один ко многим (One-to-Many)
PHP:
class Post extends Model
{
    public function comments()
    {
        return $this->hasMany(Comment::class);
    }
}

class Comment extends Model
{
    public function post()
    {
        return $this->belongsTo(Post::class);
    }
}

// Пример использования
$post = Post::find(1);
$comments = $post->comments;

Многие ко многим (Many-to-Many)
PHP:
class User extends Model
{
    public function roles()
    {
        return $this->belongsToMany(Role::class);
    }
}

class Role extends Model
{
    public function users()
    {
        return $this->belongsToMany(User::class);
    }
}

// Пример использования
$user = User::find(1);
$roles = $user->roles;

Полиморфные отношения
Полиморфные отношения позволяют связывать одну модель с несколькими другими моделями.
PHP:
class Photo extends Model
{
    public function imageable()
    {
        return $this->morphTo();
    }
}

class Post extends Model
{
    public function photos()
    {
        return $this->morphMany(Photo::class, 'imageable');
    }
}

class Product extends Model
{
    public function photos()
    {
        return $this->morphMany(Photo::class, 'imageable');
    }
}

// Пример использования
$post = Post::find(1);
$photos = $post->photos;

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