Метод setAttribute
Метод setAttribute применяется к экземпляру модели Eloquent
и позволяет установить значение для указанного атрибута.
Первым параметром передаётся имя атрибута (колонки в базе данных),
вторым - значение, которое нужно установить. Метод возвращает
текущий экземпляр модели, что позволяет использовать цепочки вызовов.
При установке значения метод учитывает мутаторы (сеттеры) модели,
а также преобразования типов, указанные в свойстве $casts.
Синтаксис
<?php
$model->setAttribute($key, $value);
?>
Пример
Давайте создадим новую модель и установим значение атрибута 'title':
<?php
use AppModelsArticle;
$article = new Article();
$article->setAttribute('title', 'New article');
echo $article->title;
?>
Результат выполнения кода:
"New article"
Обратите внимание, что установить значение атрибута можно и напрямую
через свойство модели, так как метод setAttribute вызывается
автоматически через магический метод __set. То есть записи
$article->title = 'New article' и
$article->setAttribute('title', 'New article') эквивалентны.
Пример
Давайте установим несколько атрибутов модели с помощью цепочки вызовов:
<?php
use AppModelsArticle;
$article = new Article();
$article->setAttribute('title', 'Important news')
->setAttribute('content', 'Detailed content')
->setAttribute('status', 'published');
$res = [
'title' => $article->title,
'content' => $article->content,
'status' => $article->status,
];
print_r($res);
?>
Результат выполнения кода:
[
"title" => "Important news",
"content" => "Detailed content",
"status" => "published",
]
Пример
Давайте используем метод setAttribute с моделью, у которой
есть мутатор для атрибута 'slug':
<?php
namespace AppModels;
use IlluminateDatabaseEloquentModel;
class Article extends Model
{
protected $fillable = ['title', 'slug', 'content'];
public function setSlugAttribute($value)
{
$this->attributes['slug'] = str($value)->slug();
}
}
?>
<?php
use AppModelsArticle;
$article = new Article();
$article->setAttribute('title', 'Hello World');
$article->setAttribute('slug', 'Hello World');
echo $article->slug;
?>
Результат выполнения кода:
"hello-world"
Пример
Давайте рассмотрим, как метод setAttribute работает с
преобразованиями типов:
<?php
namespace AppModels;
use IlluminateDatabaseEloquentModel;
class User extends Model
{
protected $casts = [
'is_admin' => 'boolean',
'age' => 'integer',
'email_verified_at' => 'datetime',
];
}
?>
<?php
use AppModelsUser;
$user = new User();
$user->setAttribute('is_admin', '1');
$user->setAttribute('age', '25');
$user->setAttribute('email_verified_at', '2024-01-15 12:00:00');
$res = [
'is_admin' => $user->is_admin,
'age' => $user->age,
'email_verified_at' => $user->email_verified_at,
];
print_r($res);
?>
Результат выполнения кода:
[
"is_admin" => true,
"age" => 25,
"email_verified_at" => "2024-01-15 12:00:00",
]
Пример
Давайте используем метод setAttribute для обновления
существующей модели:
<?php
use AppModelsArticle;
$article = Article::find(1);
$article->setAttribute('title', 'Updated title');
$article->setAttribute('status', 'published');
$article->save();
echo $article->title . ' - ' . $article->status;
?>
Результат выполнения кода:
"Updated title - published"
Смотрите также
-
метод
getAttribute,
который получает значение атрибута модели -
метод
fill,
который массово заполняет атрибуты модели -
метод
forceFill,
который массово заполняет атрибуты модели без защиты -
метод
save,
который сохраняет модель в базу данных