public function generateRules($table)
{
$columns = [];
foreach ($table->columns as $index => $column) {
$isBlameableCol = $column->name === $this->createdByColumn || $column->name === $this->updatedByColumn;
$isTimestampCol = $column->name === $this->createdAtColumn || $column->name === $this->updatedAtColumn;
$removeCol = $this->useBlameableBehavior && $isBlameableCol || $this->useTimestampBehavior && $isTimestampCol;
if ($removeCol) {
$columns[$index] = $column;
unset($table->columns[$index]);
}
}
$rules = [];
//for enum fields create rules "in range" for all enum values
$enum = $this->getEnum($table->columns);
foreach ($enum as $field_name => $field_details) {
$ea = array();
foreach ($field_details['values'] as $field_enum_values) {
$ea[] = 'self::' . $field_enum_values['const_name'];
}
$rules[] = "['" . $field_name . "', 'in', 'range' => [\n " . implode(",\n ", $ea) . ",\n ]\n ]";
}
// inject namespace for targetClass
$parentRules = parent::generateRules($table);
$ns = "\\{$this->ns}\\";
$match = "'targetClass' => ";
$replace = $match . $ns;
foreach ($parentRules as $k => $parentRule) {
$parentRules[$k] = str_replace($match, $replace, $parentRule);
}
$rules = array_merge($parentRules, $rules);
$table->columns = array_merge($table->columns, $columns);
return $rules;
}