Skip to content
Icon

WARNING You're browsing the documentation for an upcoming version of Laravel Oci8. The documentation and features of this release are subject to change.

Oracle BLOB Support

Laravel-OCI8 provides special handling for Oracle BLOB (Binary Large Object) fields. When querying a BLOB field, the value is automatically loaded instead of the raw OCI-Lob object.

Querying BLOB Data

$data = DB::table('mylobs')->get();
 
foreach ($data as $row) {
echo $row->blobdata;
}

Inserting a BLOB via Transaction

For more control over BLOB insertion, use a transaction with PDO:

DB::transaction(function ($conn) {
/** @var \Illuminate\Database\Connection $conn */
$pdo = $conn->getPdo();
$sql = "INSERT INTO mylobs (id, blobdata)
VALUES (mylobs_id_seq.nextval, EMPTY_BLOB())
RETURNING blobdata INTO :blob";
 
$stmt = $pdo->prepare($sql);
$stmt->bindParam(':blob', $lob, PDO::PARAM_LOB);
$stmt->execute();
$lob->save('blob content');
});

Inserting Records with BLOB and Auto-Incrementing ID

Use the insertLob convenience method for simpler cases:

$id = DB::table('mylobs')->insertLob(
['name' => 'Insert Binary Test'],
['blobfield' => 'Lorem ipsum Minim occaecat in velit.']
);

Note: The auto-incrementing column name defaults to id if not specified as the third parameter.

Updating Records with BLOB

$id = DB::table('mylobs')
->whereId(1)
->updateLob(
['name' => 'demo update blob'],
['blobfield' => 'blob content here']
);

Note: When using updateLob, the auto-incrementing column name defaults to id if not specified as the third parameter.

Using OracleEloquent for Automatic BLOB Handling

For a more convenient approach, extend the OracleEloquent class instead of the standard Eloquent Model. This allows you to set BLOB fields directly as model attributes.

Defining the Model

<?php
 
use Yajra\Oci8\Eloquent\OracleEloquent as Eloquent;
 
class Post extends Eloquent
{
// Define which fields are binary/BLOB types
protected $binaries = ['content'];
 
// Define the sequence name for auto-incrementing
// Defaults to {table}_{primaryKey}_seq if not set
protected $sequence = null;
}

Saving a Record

use App\Models\Post;
use Illuminate\Support\Str;
 
// In a controller or route
$post = new Post();
$post->title = $request->input('title');
$post->company_id = auth()->user()->company->id;
$post->slug = Str::slug($request->input('title'));
$post->content = $request->input('content'); // Set BLOB field directly
$post->save();

Limitations

Warning: Saving multiple records with BLOB fields using Post::insert($posts) is not yet supported. You must use save() on individual model instances.

See Also