Yii'de yalnızca bir form kullanarak birden çok kayıt nasıl ekleyeceğinizi bilen var mı? Tüm kayıtlar aynı modele ait ve aynı formatta.Yii - bir form gönderiminde birden çok kayıt
Çok teşekkürler,
Nick
Yii'de yalnızca bir form kullanarak birden çok kayıt nasıl ekleyeceğinizi bilen var mı? Tüm kayıtlar aynı modele ait ve aynı formatta.Yii - bir form gönderiminde birden çok kayıt
Çok teşekkürler,
Nick
"batchUpdate" from the guide eşdeğer "batchCreate" yöntemi böyle bir şey olabilir:
yeni bir örneğini sahiptirpublic function actionBatchCreate() {
$models=array();
// since you know how many models
$i=0;
while($i<5) {
$models[]=Modelname::model();
// you can also allocate memory for the model with `new Modelname` instead
// of assigning the static model
}
if (isset($_POST['Modelname'])) {
$valid=true;
foreach ($_POST['Modelname'] as $j=>$model) {
if (isset($_POST['Modelname'][$j])) {
$models[$j]=new Modelname; // if you had static model only
$models[$j]->attributes=$model;
$valid=$models[$j]->validate() && $valid;
}
}
if ($valid) {
$i=0;
while (isset($models[$i])) {
$models[$i++]->save(false);// models have already been validated
}
// anything else that you want to do, for example a redirect to admin page
$this->redirect(array('modelname/admin'));
}
}
$this->render('batch-create-form',array('models'=>$models));
}
Buradaki tek endişe olduğunu new
kullanarak, kaydettiğiniz her model için oluşturulacak. Mantığın geri kalanı herhangi bir şekilde uygulanabilir, örneğin yukarıdaki örnekte tüm modeller onaylanır ve sonra kaydedilir, oysa herhangi bir model geçersizse veya modelleri doğrudan kaydedebilirseniz doğrulama işlemini durdurabilirsiniz. doğrulama, save
araması sırasında gerçekleşir. Yani mantık gerçekten uygulamanızın ux'ine bağlı olacaktır.
Bunun için teşekkürler ve geç cevap için özür dilerim. Bu yardımcı oldu. – goose
Bu kodu GeneralRepository.php
dosya adının altındaki components
klasörüne koyun. her yerde
<?php
class GeneralRepository
{
/**
* Creates and executes an INSERT SQL statement for several rows.
*
* Usage:
* $rows = array(
* array('id' => 1, 'name' => 'John'),
* array('id' => 2, 'name' => 'Mark')
*);
* GeneralRepository::insertSeveral(User::model()->tableName(), $rows);
*
* @param string $table the table that new rows will be inserted into.
* @param array $array_columns the array of column datas array(array(name=>value,...),...) to be inserted into the table.
* @return integer number of rows affected by the execution.
*/
public static function insertSeveral($table, $array_columns)
{
$connection = Yii::app()->db;
$sql = '';
$params = array();
$i = 0;
foreach ($array_columns as $columns) {
$names = array();
$placeholders = array();
foreach ($columns as $name => $value) {
if (!$i) {
$names[] = $connection->quoteColumnName($name);
}
if ($value instanceof CDbExpression) {
$placeholders[] = $value->expression;
foreach ($value->params as $n => $v)
$params[$n] = $v;
} else {
$placeholders[] = ':' . $name . $i;
$params[':' . $name . $i] = $value;
}
}
if (!$i) {
$sql = 'INSERT INTO ' . $connection->quoteTableName($table)
. ' (' . implode(', ', $names) . ') VALUES ('
. implode(', ', $placeholders) . ')';
} else {
$sql .= ',(' . implode(', ', $placeholders) . ')';
}
$i++;
}
$command = Yii::app()->db->createCommand($sql);
return $command->execute($params);
}
}
Ve kullanımı:
$rows = array(
array('id' => 1, 'name' => 'John'),
array('id' => 2, 'name' => 'Mark')
);
GeneralRepository::insertSeveral(User::model()->tableName(), $rows);
Bu sadece bir sorguyu yürütmek.
http://www.yiiframework.com/doc/guide/1.1/en/form.table – dInGd0nG
Teşekkürler! Tam da aradığım şey. – goose
Herkes, eşdeğer batchCreate yönteminin sözdizimini doğrulayabilir mi? Bu, yukarıdaki sayfadan eksik. – goose