public function actionSorting() { if (isset($_POST['tree'])) { $model = new Category(); $this->performAjaxValidation($model); //при сортировке дерева параметры корня измениться не могут, //поэтоtму его вообще сохранять не будем $data = json_decode($_POST['tree']); array_shift($data); //получаем большие case для update $update = array(); $nestedSortableFields = array('depth' => Category::DEPTH, 'left' => Category::LFT, 'right' => Category::RGT); foreach ($nestedSortableFields as $key => $field) { $update_data = CHtml::listData($data, 'item_id', $key); $update[] = "{$field} = " . SqlHelper::arrToCase('id', $update_data); } //обновляем всю таблицу, кроме рута $condition = Category::DEPTH . " > 1"; $command = Yii::app()->db->commandBuilder->createSqlCommand("UPDATE `{$model->tableName()}` SET " . implode(', ', $update) . " WHERE {$condition}"); $command->execute(); echo CJSON::encode(array('status' => 'ok', 'redirect' => $this->createUrl('manage'))); Yii::app()->end(); } $this->render('sorting'); }
public function actionSorting($root_id, $menu_id) { if (isset($_POST['tree'])) { $model = new MenuSection(); $this->performAjaxValidation($model); //при сортировке дерева параметры корня измениться не могут, //поэтоtму его вообще сохранять не будем $data = json_decode($_POST['tree']); array_shift($data); //получаем большие case для update $update = []; $js_to_sql_mapping = ['depth' => 'level', 'left' => 'left', 'right' => 'right']; foreach ($js_to_sql_mapping as $js_field => $field) { $update_data = CHtml::listData($data, 'item_id', $js_field); $update[] = "t.{$field} = " . SqlHelper::arrToCase('id', $update_data, 't'); } $in = implode(', ', array_values(CHtml::listData($data, 'item_id', 'item_id'))); $condition = "t.level > 1"; $command = Yii::app()->db->commandBuilder->createSqlCommand("UPDATE `{$model->tableName()}` as t SET " . implode(', ', $update) . " WHERE {$condition} AND t.id IN ({$in})"); $command->execute(); echo CJSON::encode(['status' => 'ok', 'redirect' => $this->createUrl('manage', ['menu_id' => $menu_id])]); Yii::app()->end(); } $this->render('sorting', ['root_id' => $root_id, 'menu_id' => $menu_id]); }
public function run() { $model = $this->model; $class = get_class($model); if (isset($_POST['tree'])) { $this->controller->performAjaxValidation($model); //при сортировке дерева параметры корня измениться не могут, //поэтоtму его вообще сохранять не будем $data = json_decode($_POST['tree']); array_shift($data); //получаем большие case для update $update = array(); $nestedSortableFields = array('depth' => $class::DEPTH, 'left' => $class::LFT, 'right' => $class::RGT); foreach ($nestedSortableFields as $key => $field) { $update_data = CHtml::listData($data, 'item_id', $key); if ($key == $class::DEPTH) { foreach ($update_data as $key => $val) { $update_data[$key]++; } } $update[] = "{$field} = " . SqlHelper::arrToCase('id', $update_data); } //обновляем всю таблицу, кроме рута $condition = $class::DEPTH . " > 1"; $command = Yii::app()->db->createCommand("UPDATE `{$model->tableName()}` SET " . implode(', ', $update) . " WHERE {$condition}"); $command->execute(); $this->controller->forward($this->forwardRoute, true); } $this->controller->render('sort', array('model' => $model, 'class' => $class)); }
public function run() { $ids = array_reverse($_POST['File']); $files = new MediaFile('sort'); $case = SqlHelper::arrToCase('id', array_flip($ids), 't'); $arr = implode(',', $ids); Yii::app()->db->getCommandBuilder()->createSqlCommand("UPDATE {$files->tableName()} AS t SET t.order = {$case} WHERE t.id IN ({$arr})")->execute(); }
public function setPositions($ids, $column, $start) { $model = $this->getOwner(); $table = $model->tableName(); $priorities = array(); foreach ($ids as $id) { $priorities[$id] = $start--; } $case = SqlHelper::arrToCase('id', $priorities, $model->getTableAlias()); $in = SqlHelper::in('id', $ids, $model->getTableAlias()); $c = Yii::app()->db->commandBuilder->createSqlCommand("UPDATE {$table} AS t SET t.{$column} = {$case} WHERE {$in}"); $c->execute(); }
public function setPositions($ids, $column, $start) { list($table, $fk1, $fk2) = SqlHelper::parseManyMany($this->owner, $this->relation); $model = $this->getOwner(); $table = $model->tableName(); $priorities = array(); foreach ($ids as $id) { $priorities[$id] = $start--; } $case = SqlHelper::arrToCase('id', $priorities, $model->getTableAlias()); $c = Yii::app()->db->commandBuilder->createSqlCommand("UPDATE {$table} AS t SET t.{$column} = {$case}"); $c->execute(); }