Поле binary
Метод binary используется в миграциях Laravel для создания колонки с бинарными данными. Он применяется к объекту схемы через метод table или create и создает колонку типа BLOB в базе данных. Первым параметром передаётся имя колонки, вторым - длина данных (опционально). Данный тип подходит для хранения изображений, файлов, сериализованных объектов и других бинарных данных.
Синтаксис
<?php
Schema::table('table_name', function (Blueprint $table) {
$table->binary('column_name', $length);
});
?>
Пример
Давайте создадим таблицу 'users' с полем 'avatar' для хранения аватара пользователя:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->binary('avatar')->nullable();
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('users');
}
};
?>
Пример
Давайте создадим таблицу 'documents' с полем 'content' для хранения содержимого документа:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up()
{
Schema::create('documents', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->binary('content');
$table->binary('preview')->nullable();
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('documents');
}
};
?>
Пример
Давайте сохраним данные в бинарное поле через модель:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Document extends Model
{
protected $fillable = ['title', 'content', 'preview'];
}
?>
<?php
namespace App\Http\Controllers;
use App\Models\Document;
class DocumentController extends Controller
{
public function store()
{
$fileContent = file_get_contents('path/to/document.pdf');
$previewData = base64_decode('base64_preview_data');
$document = Document::create([
'title' => 'My Document',
'content' => $fileContent,
'preview' => $previewData,
]);
echo $document->id;
}
}
?>
Результат выполнения кода:
1
Пример
Давайте извлечем бинарные данные из базы и выведем их размер:
<?php
namespace App\Http\Controllers;
use App\Models\Document;
class DocumentController extends Controller
{
public function show($id)
{
$document = Document::findOrFail($id);
$contentSize = strlen($document->content);
$previewSize = $document->preview ? strlen($document->preview) : 0;
$res = [
'title' => $document->title,
'content_size' => $contentSize,
'preview_size' => $previewSize,
];
echo json_encode($res);
}
}
?>
Результат выполнения кода:
{"title":"My Document","content_size":1024,"preview_size":256}
Пример
Давайте обновим бинарное поле у существующей записи:
<?php
namespace App\Http\Controllers;
use App\Models\Document;
class DocumentController extends Controller
{
public function update($id)
{
$document = Document::findOrFail($id);
$newContent = file_get_contents('path/to/new_document.pdf');
$document->content = $newContent;
$document->save();
echo 'Document updated';
}
}
?>
Результат выполнения кода:
"Document updated"