Доброе утро.
Во это неверно.
if ($model->validate()) {
$model->save();
} else {
$model->save();
print_r($model->errors);
}
Если атрибуты не прошли валидацию, то зачем пытаться опять сохранить модель? Ничего не произойдёт. Просто выводите ошибки.
Нужно изменить строку с $model-> id_avtor1 = $row [4];
Если в $row[4] у Вас хранится имя автора, то сделайте метод, который будет искать в таблице `author` автора по его имени и возвращать его id.
Как-то так, статический метод в модели Author:
public static function getIdAuthor($name){
return Author::find()->select('id')->where('name=:name',[':name' => $name])->column();
}
И подставляете в строку
$model-> id_avtor1 = Author::idAuthor($row[4]);