markelov666
Умник
Eloquent — это объектно-реляционное отображение (ORM), входящее в состав фреймворка Laravel. Оно предоставляет удобный, интуитивно понятный интерфейс для работы с базами данных, позволяет работать с таблицами через модели и использовать объектно-ориентированный подход для управления данными.
Основные понятия Eloquent
Модель
Модель — это класс, который соответствует таблице в базе данных. В Laravel модели обычно располагаются в директории
Настройка модели
Таблица
По умолчанию Eloquent предполагает, что имя таблицы совпадает с именем модели во множественном числе и в нижнем регистре. Например, для модели
Первичный ключ
Eloquent ожидает, что каждая таблица содержит поле
CRUD-операции в Eloquent
Создание записей
С помощью метода
Метод
С использованием объекта модели
Чтение записей
Получение данных из базы осуществляется с помощью методов
Обновление записей
С использованием метода
С помощью объекта модели
Удаление записей
Отношения между моделями
Один к одному (One-to-One)
Один ко многим (One-to-Many)
Многие ко многим (Many-to-Many)
Полиморфные отношения
Полиморфные отношения позволяют связывать одну модель с несколькими другими моделями.
Заключение
Eloquent предоставляет мощный и удобный способ работы с базой данных в 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. Благодаря интуитивно понятному синтаксису и гибким возможностям, он подходит как для небольших проектов, так и для крупных приложений.
