Я пытаюсь выполнить несколько операторов sql в yii, чтобы уменьшить количество обращений к серверу. Это для области, называемой нишевой специализацией. Пользователю разрешено ввести не более трех записей, однако это поле является необязательным. Это код:
$sql = " Delete from cur_niche
where userid =:id ; " ;
$var2 = array_filter($object->nspecial) ;
if(!empty($var2))
{ $str = "" ;
$i = 0 ;
foreach($var2 as $n)
{ if($i==0)
$str.= "(:id,:n".$i.")" ;
else
$str.= ", (:id,:n".$i.")" ;
$i++ ;
}
$sql .= "Insert into cur_niche (userid,nspecial) Values ".$str." ; " ;
}
$command = Yii::app()->db->createCommand($sql) ;
$command->bindParam(":id",$id,PDO::PARAM_STR) ;
if(!empty($var2))
{ $i = 0 ;
foreach($var2 as $n)
{
$str = ":n".$i ;
$command->bindParam($str,$n,PDO::PARAM_STR) ;
$i++ ;
}
}
$result = $command->execute() && $result ;
Я попытался сбросить все свои переменные, оператор sql сформирован правильно, объект $ имеет правильные данные из формы, в привязке $str работает нормально. Однако я столкнулся со следующей проблемой: 1) Если в массиве специализации ниши ($object->nspecial) есть только одна запись, запись работает нормально. 2) Однако, если заполнено более одного поля, вставка не может быть выполнена, потому что поля userid и nspecial образуют составной первичный ключ.
Разве составной первичный ключ не зависит от обоих значений, образующих уникальную комбинацию (при условии, что пользователь вводит уникальные значения в различные поля)? Если я удалю ограничение первичного ключа, оно просто дублирует значение одного поля с двумя строками в базе данных. Что я здесь делаю неправильно?