Атрибут incrementing
Атрибут incrementing в моделях Eloquent контролирует поведение автоинкремента для первичного ключа. По умолчанию этот атрибут имеет значение true, что означает, что при создании новой записи значение первичного ключа будет автоматически увеличено на единицу. Если вы используете нечисловые ключи или управляете значением ключа вручную, этот атрибут следует установить в false.
Атрибут объявляется в классе модели как защищённое свойство. Он влияет на работу методов save, create, updateOrCreate и других, которые создают новые записи в базе данных. Когда incrementing равен true, Eloquent автоматически присваивает полю первичного ключа следующее доступное значение из последовательности базы данных.
Синтаксис
<?php
class Model extends Model
{
protected $incrementing = true; // или false
}
?>
Пример
Рассмотрим модель с автоинкрементом по умолчанию:
<?php
namespace AppModels;
use IlluminateDatabaseEloquentModel;
class Article extends Model
{
// Атрибут incrementing по умолчанию равен true
protected $incrementing = true;
}
?>
При создании новой статьи ID будет установлен автоматически:
<?php
use AppModelsArticle;
$article = new Article();
$article->title = 'abcde';
$article->text = 'content text';
$article->save();
echo $article->id;
?>
Результат выполнения кода:
"1"
Пример
Рассмотрим модель с отключённым автоинкрементом для использования UUID-ключей:
<?php
namespace AppModels;
use IlluminateDatabaseEloquentModel;
class Product extends Model
{
protected $incrementing = false;
protected $keyType = 'string';
}
?>
При создании товара мы должны явно указать значение первичного ключа:
<?php
use AppModelsProduct;
use IlluminateSupportStr;
$product = new Product();
$product->id = Str::uuid();
$product->title = 'category';
$product->price = 100;
$product->save();
echo $product->id;
?>
Результат выполнения кода:
"550e8400-e29b-41d4-a716-446655440000"
Пример
Рассмотрим модель с нестандартным числовым ключом, который мы управляем вручную:
<?php
namespace AppModels;
use IlluminateDatabaseEloquentModel;
class Category extends Model
{
protected $incrementing = false;
// Можно также указать тип ключа
protected $keyType = 'int';
}
?>
При создании категории мы сами задаём значение ID:
<?php
use AppModelsCategory;
$category = new Category();
$category->id = 1001;
$category->name = 'user';
$category->save();
echo $category->id;
?>
Результат выполнения кода:
"1001"
Смотрите также
-
атрибут
primaryKey,
который задаёт имя поля первичного ключа -
атрибут
keyType,
который определяет тип данных первичного ключа -
атрибут
table,
который задаёт имя таблицы для модели -
метод
save,
который сохраняет модель в базу данных