PHP code example of staudenmeir / eloquent-json-relations
1. Go to this page and download the library: Download staudenmeir/eloquent-json-relations 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/ */
staudenmeir / eloquent-json-relations example snippets
class User extends Model
{
use \Staudenmeir\EloquentJsonRelations\HasJsonRelationships;
protected $casts = [
'options' => 'json',
];
public function locale()
{
return $this->belongsTo(Locale::class, 'options->locale_id');
}
}
class Locale extends Model
{
use \Staudenmeir\EloquentJsonRelations\HasJsonRelationships;
public function users()
{
return $this->hasMany(User::class, 'options->locale_id');
}
}
Schema::create('users', function (Blueprint $table) {
$table->bigIncrements('id');
$table->json('options');
$locale_id = DB::connection()->getQueryGrammar()->wrap('options->locale_id');
$locale_id = 'CAST('.$locale_id.' AS INT)';
$table->computed('locale_id', $locale_id)->persisted();
$table->foreign('locale_id')->references('id')->on('locales');
});
class User extends Model
{
use \Staudenmeir\EloquentJsonRelations\HasJsonRelationships;
protected $casts = [
'options' => 'json',
];
public function roles(): \Staudenmeir\EloquentJsonRelations\Relations\BelongsToJson
{
return $this->belongsToJson(Role::class, 'options->role_ids');
}
}
class Role extends Model
{
use \Staudenmeir\EloquentJsonRelations\HasJsonRelationships;
public function users(): \Staudenmeir\EloquentJsonRelations\Relations\HasManyJson
{
return $this->hasManyJson(User::class, 'options->role_ids');
}
}
class User extends Model
{
use \Staudenmeir\EloquentJsonRelations\HasJsonRelationships;
protected $casts = [
'options' => 'json',
];
public function roles(): \Staudenmeir\EloquentJsonRelations\Relations\BelongsToJson
{
return $this->belongsToJson(Role::class, 'options->roles[]->role_id');
}
}
class Role extends Model
{
use \Staudenmeir\EloquentJsonRelations\HasJsonRelationships;
public function users(): \Staudenmeir\EloquentJsonRelations\Relations\HasManyJson
{
return $this->hasManyJson(User::class, 'options->roles[]->role_id');
}
}
class Role extends Model
{
use \Staudenmeir\EloquentJsonRelations\HasJsonRelationships;
public function latestUser(): \Staudenmeir\EloquentJsonRelations\Relations\HasOneJson
{
return $this->hasOneJson(User::class, 'options->roles[]->role_id')
->latest();
}
}
class Employee extends Model
{
public function tasks(): \Staudenmeir\EloquentJsonRelations\Relations\BelongsToJson
{
return $this->belongsToJson(
Task::class,
['options->work_stream_ids', 'team_id'],
['work_stream_id', 'team_id']
);
}
}
class Task extends Model
{
public function employees(): \Staudenmeir\EloquentJsonRelations\Relations\HasManyJson
{
return $this->hasManyJson(
Employee::class,
['options->work_stream_ids', 'team_id'],
['work_stream_id', 'team_id']
);
}
}
Schema::create('users', function (Blueprint $table) {
// ...
// Array of IDs
$table->rawIndex('(cast(`role_ids` as unsigned array))', 'users_role_ids_index');
// Array of objects
$table->rawIndex('(cast(`roles`->\'$[*]."role_id"\' as unsigned array))', 'users_roles_index');
});
Schema::create('users', function (Blueprint $table) {
// ...
// Array of IDs
$table->rawIndex('(cast(`options`->\'$."role_ids"\' as unsigned array))', 'users_role_ids_index');
// Array of objects
$table->rawIndex('(cast(`options`->\'$."roles"[*]."role_id"\' as unsigned array))', 'users_roles_index');
});
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->jsonb('role_ids');
$table->index('role_ids')->algorithm('gin');
});
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->jsonb('options');
$table->rawIndex('("options"->\'role_ids\')', 'users_options_index')->algorithm('gin');
});
class Role extends Model
{
use \Staudenmeir\EloquentHasManyDeep\HasRelationships;
public function projects()
{
return $this->hasManyThroughJson(
Project::class,
User::class,
new \Staudenmeir\EloquentJsonRelations\JsonKey('options->role_ids')
);
}
}
class Project extends Model
{
use \Staudenmeir\EloquentHasManyDeep\HasRelationships;
public function roles()
{
return $this->hasManyThroughJson(
Role::class, User::class, 'id', 'id', 'user_id', new JsonKey('options->role_ids')
);
}
}
class User extends Model
{
use \Staudenmeir\EloquentHasManyDeep\HasRelationships;
use \Staudenmeir\EloquentJsonRelations\HasJsonRelationships;
public function permissions(): \Staudenmeir\EloquentHasManyDeep\HasManyDeep
{
return $this->hasManyDeepFromRelations(
$this->roles(),
(new Role)->permissions()
);
}
public function roles(): \Staudenmeir\EloquentJsonRelations\Relations\BelongsToJson
{
return $this->belongsToJson(Role::class, 'options->role_ids');
}
}
class Role extends Model
{
public function permissions()
{
return $this->hasMany(Permission::class);
}
}
$permissions = User::find($id)->permissions;
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.