I am using Yii 2 basic application template. I have two models Attendancereport and Attendancereportdetails.
They are related to each other by one-to-many relation (meaning one Attendancereport can have many Attendancereportdetails)
I want to add a validation rule to second model’s attribute in the first model.
There is a attribute called Standard in the Attendancereportdetails. I need to add validation rule to this attribute in the Attendancereport model.
I am using dynamic form to capture the student attendance as shown in the image. I need to add a client side validation on the Standard field which belongs to the second model.
First model : Attendancereport
<?php
namespace app\models;
use Yii;
class Attendancereport extends \yii\db\ActiveRecord
{
public static function tableName()
{
return 'attendancereport';
}
public function rules()
{
return [
[['AcademicYearId', 'ASCId', 'UserId', 'DateofReport'], 'required'],
[['AcademicYearId', 'ASCId', 'UserId'], 'integer'],
[['Standard'],'validatestandard'], // custom validation method for Standard attribute
];
}
public function attributeLabels()
{
return [
'AttendanceReportId' => 'Attendance Report ID',
'AcademicYearId' => 'Academic Year',
'ASCId' => 'ASC Center',
'UserId' => 'User',
'DateofReport' => 'Date',
];
}
// This method will validate the Standard attribute
public function validatestandard($attribute,$params,$validator)
{
if($this->Standard==1)
$this->addError($attribute,"Incorrect");
}
public function getAcademicYear()
{
return $this->hasOne(Academicyear::className(), ['Id' => 'AcademicYearId']);
}
public function getASC()
{
return $this->hasOne(Asccenter::className(), ['ASCId' => 'ASCId']);
}
public function getUser()
{
return $this->hasOne(Ascuser::className(), ['UserId' => 'UserId']);
}
public function getAttendancereportdetails()
{
return $this->hasMany(Attendancereportdetails::className(), ['AttendanceReportId' => 'AttendanceReportId']);
}
}
Second model : Attendancereportdetails
<?php
namespace app\models;
use Yii;
class Attendancereportdetails extends \yii\db\ActiveRecord
{
public static function tableName()
{
return 'attendancereportdetails';
}
public function rules()
{
return [
[['StudentId', 'Standard', 'AttendanceStatus'], 'required'],
[['AttendanceReportId', 'StudentId'], 'integer'],
[['AttendanceStatus'], 'string', 'max' => 20],
[['AttendanceReportId'], 'exist', 'skipOnError' => true, 'targetClass' => Attendancereport::className(), 'targetAttribute' => ['AttendanceReportId' => 'AttendanceReportId']],
[['StudentId'], 'exist', 'skipOnError' => true, 'targetClass' => Student::className(), 'targetAttribute' => ['StudentId' => 'StudentId']],
];
}
public function attributeLabels()
{
return [
'AttendanceReportDetailsId' => 'Attendance Report Details ID',
'AttendanceReportId' => 'Attendance Report ID',
'StudentId' => 'Student',
'Standard' => 'Standard',
'AttendanceStatus' => 'Attendance Status',
];
}
public function getAttendanceReport()
{
return $this->hasOne(Attendancereport::className(), ['AttendanceReportId' => 'AttendanceReportId']);
}
public function getStudent()
{
return $this->hasOne(Student::className(), ['StudentId' => 'StudentId']);
}
}
How can we accomplish this.