1. Go to this page and download the library: Download yii2tech/ar-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/ */
yii2tech / ar-role example snippets
class Human extends \yii\db\ActiveRecord
{
public static function tableName()
{
return 'Human';
}
}
class Student extends Human // extending `Human` - not `ActiveRecord`!
{
public function behaviors()
{
return [
'roleBehavior' => [
'class' => RoleBehavior::className(), // Attach role behavior
'roleRelation' => 'studentRole', // specify name of the relation to the slave table
'roleAttributes' => [
'roleId' => Human::ROLE_STUDENT // mark 'Human' record as 'student'
],
],
];
}
public function getStudentRole()
{
// Here `StudentRole` is and ActiveRecord, which uses 'Student' table :
return $this->hasOne(StudentRole::className(), ['humanId' => 'id']);
}
}
$students = Student::find()->all();
class Student extends Human
{
// ...
public static function find()
{
return parent::find()->where(['role' => 'student']);
}
}
class Instructor extends \yii\db\ActiveRecord // do not extending `Human`!
{
public function behaviors()
{
return [
'roleBehavior' => [
'class' => RoleBehavior::className(), // Attach role behavior
'roleRelation' => 'human', // specify name of the relation to the master table
'isOwnerSlave' => true, // indicate that owner is a role slave - not master
'roleAttributes' => [
'roleId' => Human::ROLE_STUDENT // will be applied to the 'Human' record
],
],
];
}
public function getHuman()
{
return $this->hasOne(Human::className(), ['id' => 'humanId']);
}
}
$model = Student::findOne(1);
echo $model->studyGroupId; // equals to $model->studentRole->studyGroupId
$model = Instructor::findOne(2);
echo $model->name; // equals to $model->human->name
$model = new Student();
$model->studyGroupId = 12;
$model = new Instructor();
$model->name = 'John Doe';
class Human extends \yii\db\ActiveRecord
{
// ...
public function sayHello($name)
{
return 'Hello, ' . $name;
}
}
class Instructor extends \yii\db\ActiveRecord
{
public function behaviors()
{
return [
'roleBehavior' => [
'class' => RoleBehavior::className(), // Attach role behavior
// ...
],
];
}
}
$model = new Instructor();
echo $model->sayHello('John'); // outputs: 'Hello, John'
class Student extends Human
{
// ...
public function rules()
{
return [
// ...
['studyGroupId', 'integer'],
['hasScholarship', 'boolean'],
];
}
}
$model = new Student();
$model->name = 'John Doe';
$model->address = 'Wall Street, 12';
$model->studyGroupId = 14;
$model->save(); // insert one record to the 'Human' table and one record - to the 'Student' table
$student = Student::findOne(17);
$student->delete(); // Deletes one record from 'Human' table and one record from 'Student' table
$students = Student::find()->with('studentRole')->all(); // only 2 queries will be performed
foreach ($students as $student) {
echo $student->studyGroupId . '<br>';
}
$instructors = Instructor::find()->with('human')->all(); // only 2 queries will be performed
foreach ($instructors as $instructor) {
echo $instructor->name . '<br>';
}
class Instructor extends ActiveRecord
{
// ...
public static function find()
{
return parent::find()->with('human');
}
}
use yii\web\Controller;
class StudentController extends Controller
{
public function actionCreate()
{
$model = new Student();
if ($model->load(Yii::$app->request->post()) && $model->save()) {
return $this->redirect(['view']);
}
return $this->render('create', [
'model' => $model,
]);
}
// ...
}
use yii\helpers\ArrayHelper;
use yii\helpers\Html;
use yii\widgets\ActiveForm;
/* @var $model Student */
class Student extends Human
{
// ...
public function attributeLabels()
{
return array_merge(
parent::attributeLabels(),
$this->getRoleRelationModel()->attributeLabels()
);
}
public function attributeHints()
{
return array_merge(
parent::attributeHints(),
$this->getRoleRelationModel()->attributeHints()
);
}
}
class Student extends Human
{
// ...
public function rules()
{
return [
// ...
[$this->getRoleRelationModel()->attributes(), 'safe'],
];
}
}
use yii\web\Controller;
class StudentController extends Controller
{
public function actionCreate()
{
$model = new Student();
$post = Yii::$app->request->post();
// data loading separated, however only single save // ...
}
use yii\helpers\ArrayHelper;
use yii\helpers\Html;
use yii\widgets\ActiveForm;
/* @var $model Student */
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.