1. Go to this page and download the library: Download illuminatech/db-role 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/ */
illuminatech / db-role example snippets
use Illuminate\Database\Eloquent\Model;
class Human extends Model
{
/**
* {@inheritdoc}
*/
protected $table = 'humans';
// ...
}
use Illuminate\Database\Eloquent\Relations\HasOne;
use Illuminatech\DbRole\InheritRole;
class Student extends Human // extending `Human` - not `Model`!
{
use InheritRole;
/**
* Defines name of the relation to the slave table
*
* @return string
*/
protected function roleRelationName(): string
{
return 'studentRole';
}
/**
* Defines attribute values, which should be automatically saved to 'humans' table
*
* @return array
*/
protected function roleMarkingAttributes(): array
{
return [
'role_id' => 'student', // mark 'Human' record as 'student'
];
}
public function studentRole(): HasOne
{
// Here `StudentRole` is an Eloquent, which uses 'students' table :
return $this->hasOne(StudentRole::class, 'human_id');
}
}
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminatech\DbRole\InheritRole;
class Instructor extends Model // do not extend `Human`!
{
use InheritRole;
/**
* {@inheritdoc}
*/
protected $primaryKey = 'human_id';
/**
* {@inheritdoc}
*/
public $incrementing = false;
/**
* Defines name of the relation to the master table
*
* @return string
*/
protected function roleRelationName(): string
{
return 'human';
}
/**
* Defines attribute values, which should be automatically saved to 'humans' table
*
* @return array
*/
protected function roleMarkingAttributes(): array
{
return [
'role' => 'instructor',
];
}
public function human(): BelongsTo
{
return $this->belongsTo(Human::class);
}
}
$model = Student::query()->first();
echo $model->study_group_id; // equals to $model->studentRole->study_group_id
$model = Instructor::query()->first();
echo $model->name; // equals to $model->human->name
use Illuminate\Database\Eloquent\Model;
class StudentRole extends Model
{
protected $table = 'students';
protected $primaryKey = 'human_id';
public $incrementing = false;
/**
* All attributes listed here will be postponed to the role model
*/
protected $fillable = [
'study_group_id',
'has_scholarship',
];
/**
* All attributes listed here will be postponed to the role model
*/
protected $guarded = [
'human_id',
];
// ...
}
class Human extends Model
{
protected $table = 'humans';
/**
* All attributes listed here will be postponed to the role model
*/
protected $fillable = [
'role',
'name',
'address',
];
/**
* All attributes listed here will be postponed to the role model
*/
protected $guarded = [
'id',
];
// ...
}
use Illuminate\Database\Eloquent\Model;
use Illuminatech\DbRole\InheritRole;
class Human extends Model
{
// ...
public function sayHello($name)
{
return 'Hello, ' . $name;
}
}
class Instructor extends Model
{
use InheritRole;
// ...
}
$model = new Instructor();
echo $model->sayHello('John'); // outputs: 'Hello, John'
$model = new Student();
$model->name = 'John Doe';
$model->address = 'Wall Street, 12';
$model->study_group_id = 14;
$model->save(); // insert one record to the 'humans' table and one record - to the 'students' table
$student = Student::query()->first();
$student->delete(); // Deletes one record from 'humans' table and one record from 'students' table
$students = Student::query()->with('studentRole')->get(); // only 2 queries will be performed
foreach ($students as $student) {
echo $student->study_group_id . '<br>';
}
$instructors = Instructor::query()->with('human')->get(); // only 2 queries will be performed
foreach ($instructors as $instructor) {
echo $instructor->name . '<br>';
}
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
class Instructor extends Model
{
protected static function boot()
{
parent::boot();
static::addGlobalScope('with-role', function (Builder $builder) {
$builder->with('human');
});
}
// ...
}
use Illuminate\Database\Eloquent\Model;
use Illuminatech\DbRole\InheritRole;
class Instructor extends Model
{
use InheritRole;
protected $fillable = [
// own fillable attributes:
'rank_id',
'salary',
// role fillable attributes:
'name',
'address',
];
// ...
}
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
class InstructorController extends Controller
{
public function store(Request $request)
{
$validatedData = $request->validate([
'salary' => ['fill($validatedData); // single assignment covers both main model and role model
$item->save(); // role model saved automatically
// return response
}
}
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.