Поле longText
Метод longText используется при создании миграций
для определения столбца, способного хранить очень большие
объемы текстовой информации. В отличие от text,
который хранит до 65 535 байт, поле longText
может содержать до 4 294 967 295 байт (около 4 ГБ).
Это делает его идеальным выбором для хранения содержимого
статей, документации, логов, JSON-данных или любого
другого объемного текста.
Синтаксис
<?php
use IlluminateDatabaseMigrationsMigration;
use IlluminateDatabaseSchemaBlueprint;
use IlluminateSupportFacadesSchema;
return new class extends Migration
{
public function up(): void
{
Schema::create('articles', function (Blueprint $table) {
$table->id();
$table->longText('content');
$table->timestamps();
});
}
public function down(): void
{
Schema::dropIfExists('articles');
}
};
?>
Метод longText принимает имя столбца
в качестве обязательного параметра и возвращает
экземпляр ColumnDefinition для дальнейшей
настройки с помощью дополнительных методов-модификаторов.
Пример с модификаторами
Рассмотрим создание таблицы с полем longText,
допускающим NULL-значения и имеющим комментарий:
<?php
use IlluminateDatabaseMigrationsMigration;
use IlluminateDatabaseSchemaBlueprint;
use IlluminateSupportFacadesSchema;
return new class extends Migration
{
public function up(): void
{
Schema::create('documents', function (Blueprint $table) {
$table->id();
$table->longText('full_text')
->nullable()
->comment('Full text content of the document');
$table->timestamps();
});
}
public function down(): void
{
Schema::dropIfExists('documents');
}
};
?>
Использование в модели
После создания миграции и запуска миграций,
в модели Eloquent поле longText работает как
обычное строковое поле. Однако для хранения очень
больших данных рекомендуется использовать
постраничную загрузку или потоковую передачу:
<?php
namespace AppModels;
use IlluminateDatabaseEloquentModel;
class Document extends Model
{
protected $fillable = ['full_text'];
// Cast to string by default
protected $casts = [
'full_text' => 'string',
];
}
?>
Пример работы с большим текстом
Демонстрация сохранения и получения большого текста с использованием модели Eloquent:
<?php
namespace AppHttpControllers;
use AppModelsDocument;
class DocumentController extends Controller
{
public function store()
{
$longText = str_repeat('This is a very long text. ', 100000);
$document = Document::create([
'full_text' => $longText,
]);
return $document;
}
public function show($id)
{
$document = Document::findOrFail($id);
return response()->json([
'id' => $document->id,
'text_length' => strlen($document->full_text),
'excerpt' => substr($document->full_text, 0, 200) . '...',
]);
}
}
?>
Результат выполнения кода для записи с большим текстом:
{
"id": 1,
"text_length": 2100000,
"excerpt": "This is a very long text. This is a very long text. ..."
}
Смотрите также
-
поле
text,
которое хранит текст до 65 535 байт -
поле
mediumText,
которое хранит текст до 16 777 215 байт -
поле
string,
которое хранит строки ограниченной длины -
поле
json,
которое хранит структурированные данные в формате JSON