PHP code example of spatie / laravel-schemaless-attributes
1. Go to this page and download the library: Download spatie/laravel-schemaless-attributes library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
spatie / laravel-schemaless-attributes example snippets
// add and retrieve an attribute
$yourModel->extra_attributes->name = 'value';
$yourModel->extra_attributes->name; // returns 'value'
// you can also use the array approach
$yourModel->extra_attributes['name'] = 'value';
$yourModel->extra_attributes['name'] // returns 'value'
// setting multiple values in one go
$yourModel->extra_attributes = [
'rey' => ['side' => 'light'],
'snoke' => ['side' => 'dark']
];
// setting/updating multiple values in one go via set()
$yourModel->extra_attributes->set([
'han' => ['side' => 'light'],
'snoke' => ['side' => 'dark']
]);
// retrieving values using dot notation
$yourModel->extra_attributes->get('rey.side'); // returns 'light'
// retrieve default value when attribute is not exists
$yourModel->extra_attributes->get('non_existing', 'default'); // returns 'default'
// it has a modelScope to retrieve all models with the given schemaless attributes
$yourModel->withSchemalessAttributes(['name' => 'value', 'name2' => 'value2'])->get();
// delete key & value
$yourModel->extra_attributes->forget('key');
Schema::table('your_models', function (Blueprint $table) {
$table->schemalessAttributes('extra_attributes');
});
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Builder;
use Spatie\SchemalessAttributes\Casts\SchemalessAttributes;
class TestModel extends Model
{
// ...
public $casts = [
'extra_attributes' => SchemalessAttributes::class,
];
public function scopeWithExtraAttributes(): Builder
{
return $this->extra_attributes->modelScope();
}
// ...
}
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Builder;
use Spatie\SchemalessAttributes\SchemalessAttributes;
use Spatie\SchemalessAttributes\SchemalessAttributesTrait;
class TestModel extends Model
{
use SchemalessAttributesTrait;
// ...
/**
* @var array
*/
protected $schemalessAttributes = [
'extra_attributes',
'other_extra_attributes',
];
public function scopeWithExtraAttributes(): Builder
{
return $this->extra_attributes->modelScope();
}
public function scopeWithOtherExtraAttributes(): Builder
{
return $this->other_extra_attributes->modelScope();
}
// ...
}
namespace App\Models\Concerns;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Builder;
use Spatie\SchemalessAttributes\Casts\SchemalessAttributes;
trait HasSchemalessAttributes
{
public function initializeHasSchemalessAttributes()
{
$this->casts['extra_attributes'] = SchemalessAttributes::class;
}
public function scopeWithExtraAttributes(): Builder
{
return $this->extra_attributes->modelScope();
}
}