powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / [YII] Добавление/изменение строк в таблице с композитным ключом
5 сообщений из 5, страница 1 из 1
[YII] Добавление/изменение строк в таблице с композитным ключом
    #38684476
SQL-Talker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет, народ!

Есть таблица из двух полей (имя пользователя и код из справочника). Есть уникальный ключ, в который входят оба эти поля.
Поскольку из самого GII не получается генерить CRUD для таблиц с композитным ключнм, воспользовался сайтом http://handsoncoding.net/

Все бы хорошо но операции изменения и добавления не работают - при операции изменения, после нажатия кнопки submit данные просто не меняются, а при операции создания новой записи рисует ошибку

автор"Error 0

Invalid operation."

В чем ошибка? Как сделать чтобы работали эти операции??


зы. Во вложениях сгенренные файлы
...
Рейтинг: 0 / 0
[YII] Добавление/изменение строк в таблице с композитным ключом
    #38685271
anvano
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имхо у вас тупо не срабатывает присвоение
Код: php
1.
$model->attributes=$_POST['InvRefUsr'];



и при создании и при апдейте

Попробуйте в модели объявить поля вашей таблицы как 'safe'

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
    public function rules()
    {
        // NOTE: you should only define rules for those attributes that
        // will receive user inputs.
        return array(
            // The following rule is used by search().
            // @todo Please remove those attributes that should not be searched.
            array('USR, TAB_NUM', 'safe', 'on'=>'search'),
            array('USR, TAB_NUM, NOTE', 'safe'),
        );
    }



По идее должно сохранить.

А еще не глушите эксепшн в контроллере и посмотрите реальный текст ошибки, который вам выведется.
Может там ваще с БД чего-то.

Для этого временно замените фунциклюшку saveModel на более простую, и посмотрите, какими словами оно вам будет ругаться
Код: php
1.
2.
3.
4.
   public function saveModel($model)
    {
       $model->save();
    }



добейтесь, что сохранение пойдёт, а потом уже будете обвешивать перехватами "Integrity constraint violation" и иже с ними
...
Рейтинг: 0 / 0
[YII] Добавление/изменение строк в таблице с композитным ключом
    #38685273
anvano
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А ваще отладку никто не отменял :)

Простое втыкание var_dump() в нужных местах иногда помогает.

Например, при создании посмотрите, что у вас приходит в POST и что получается после присваивания атрибутов.

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
    public function actionCreate()
    {
        $model=new InvRefUsr;

        if(isset($_POST['ajax']) && $_POST['ajax']==='client-account-create-form')
        {
            echo CActiveForm::validate($model);
            Yii::app()->end();
        }

        if(isset($_POST['InvRefUsr']))
        {
            var_dump($_POST['InvRefUsr']);
            $model->attributes=$_POST['InvRefUsr'];
            var_dump($model->getAttributes());
            die();
            if($model->validate())
            {
                $this->saveModel($model);
                $this->redirect(array('view','USR'=>$model->USR, 'TAB_NUM'=>$model->TAB_NUM));
            }
        }
        $this->render('create',array('model'=>$model));
    }
...
Рейтинг: 0 / 0
[YII] Добавление/изменение строк в таблице с композитным ключом
    #38685386
SQL-Talker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
anvano...
Попробуйте в модели объявить поля вашей таблицы как 'safe'
...
Шаман, волшебник )))
Вопрос от новичка - что именно в навело на мысль про 'safe'?
...
Рейтинг: 0 / 0
[YII] Добавление/изменение строк в таблице с композитным ключом
    #38685607
anvano
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL-Talker,

Ошибка при сохранении в 90% случаев = ошибка в запросе.
Ошибка в запросе = 90% неправильно биндятся переменные.
А в YII если переменные неправильно биндятся, то скорее всего они ваще пустые
А если они пустые, то 90% при назначении модели отфильтровались, то бишь не описаны как 'safe'


:)

Короче логика как в анекдоте "Коробка квадратная, значит, предмет там круглый. Раз круглый, значит, оранжевый".
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / [YII] Добавление/изменение строк в таблице с композитным ключом
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]