Валидация нескольких записей в БД

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Fair
Сообщения: 2
Зарегистрирован: 2019.11.06, 10:14

Валидация нескольких записей в БД

Сообщение Fair » 2019.11.07, 10:09

Здравствуйте.

Имеется модель Detail для связи с таблицей в БД. К ней привязана модель-прослойка Detail_Model:

Код: Выделить всё

class Detail_Model extends Model
{
    public $id;
    public $detailNum;
    public $detailName;

    public function rules()
    {
        return [
            ['detailNum', 'required'],
            ['detailNum', 'string', 'max' => 64],
            ['detailNum', 'unique', 'targetClass'=>'app\models\Detail'],
            ['detailName', 'string', 'max' => 128],
        ];
    }
Все прекрасно работает, но... Сделал страницу добавления деталей из списка( textarea ), добавление идет одним запросом:

Код: Выделить всё

if( count( $detailsArr ) > 0 )
        Yii::$app->db->createCommand()->batchInsert(\app\models\Detail::tableName(), ['detailNum'], [$detailsArr])->execute();
И это тоже прекрасно работает, но вот в чем проблема - DetailNum должен быть уникальным, для этого использую проверку:

Код: Выделить всё

if( $detailModel->validate() )
            $detailsArr[] =  $detailNum;
Но при таком подходе для каждого detailNum вызывается метод validate() и соответственно идет запрос к БД. То есть, если я пробую добавить 1000 записей, то для валидации требуется 1000 запросов. Можно ли каким-то образом сделать валидацию одним запросом по аналогии с добавлением записей?

Ответить