Не получается работать с AR

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
filonme
Сообщения: 11
Зарегистрирован: 2012.02.21, 23:35

Не получается работать с AR

Сообщение filonme »

Добрый вечер.

Вроде все делаю как в примерах, но не могу добавить запись в БД.
http://www.yiiframework.com/doc/guide/1 ... e.ar#sec-3

Т.е. у меня есть модель с генерированная через gii.
Модель Cart, таблица в БД cart.
Поля Id, uid, pid все int 11.
id соответственно праймори авто инкримент.

пытаюсь использовать

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

$post=new Cart;
        $post->uid = '1';
        $post->pid = '1';
        if($post->save())
        {
           echo 'ok';
        }
Укажите где я не прав.
Просто я все время работал с codeigniter а в yii подход к БД совершенно другой и более сложный.

Можно как то посмотреть итоговый запрос к БД?
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: Не получается работать с AR

Сообщение slavcodev »

http://www.yiiframework.com/doc/guide/1 ... cs.logging
прочитать лучше все, но обрати внимание на 5 и 6, потом возвращайся рассказывай что не получается, будем помогать
Жду Yii 3!
filonme
Сообщения: 11
Зарегистрирован: 2012.02.21, 23:35

Re: Не получается работать с AR

Сообщение filonme »

не черта там не понял...

Скрин того что получилось.
$post = new Cart - это 10 строка.

http://xmages.net/storage/10/1/0/b/3/up ... 00f729.gif
chang
Сообщения: 125
Зарегистрирован: 2010.12.03, 20:01

Re: Не получается работать с AR

Сообщение chang »

сделй так

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


    if($post->save())
        echo "OK";
    else
        print_r($post->getErrors());

 
но походу у тебя ПК стоит не на ID а на uid
поэтому и не пашет
filonme
Сообщения: 11
Зарегистрирован: 2012.02.21, 23:35

Re: Не получается работать с AR

Сообщение filonme »

chang писал(а): но походу у тебя ПК стоит не на ID а на uid
поэтому и не пашет
Сделал что бы добавлялось.
дело было в 2-х полях которые я не заполнял. Думал что как и везде они по дефолту заполнятся null.
А надо именно указывать (( Создавая при этом лишние куски кода.

Т.е. получилось так :

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

$post = new Cart;
        $post->uid = '1';
        $post->pid = '1';
        $post->number = '1';
        $post->size = 'all';
        $post->time = new CDbExpression('NOW()');
 

Следующий вопрос в догонку =)
Расскажите пожалуйста, как выполнить данный запрос:
INSERT INTO cart (uid, pid, time) VALUES (1,1, NOW());
В CI было просто $this->db->query('запрос');
Как с этим в YII ?

Заранее благодарен.
voshum
Сообщения: 40
Зарегистрирован: 2011.03.21, 17:43

Re: Не получается работать с AR

Сообщение voshum »

Сделал что бы добавлялось.
дело было в 2-х полях которые я не заполнял. Думал что как и везде они по дефолту заполнятся null.
А надо именно указывать (( Создавая при этом лишние куски кода.
Ну так то он null'ом заполняет. Проверь БД, может у тебя для полей NOT NULL стоит. И еще для поля time можно использовать CTimestampBehavior, удобная штука.
Roms
Сообщения: 50
Зарегистрирован: 2011.01.29, 22:39

Re: Не получается работать с AR

Сообщение Roms »

filonme писал(а): INSERT INTO cart (uid, pid, time) VALUES (1,1, NOW());

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

$cart=new Cart;
$cart->uid = 20;
$cart->pid = 10;
$cart->time=new CDbExpression('NOW()');
$cart->save();
 
http://yiiframework.ru/doc/guide/ru/database.ar
Раздел "Создание записи"
filonme
Сообщения: 11
Зарегистрирован: 2012.02.21, 23:35

Re: Не получается работать с AR

Сообщение filonme »

Roms писал(а):
filonme писал(а): INSERT INTO cart (uid, pid, time) VALUES (1,1, NOW());

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

$cart=new Cart;
$cart->uid = 20;
$cart->pid = 10;
$cart->time=new CDbExpression('NOW()');
$cart->save();
http://yiiframework.ru/doc/guide/ru/database.ar
Раздел "Создание записи"

Это все понятно. А как целиком вставить запрос.
Вот мне пришла переменная $sql;

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

INSERT INTO cart (uid, pid, time) VALUES (1,1, NOW());
INSERT INTO cart (uid, pid, time) VALUES (1,2, NOW());
INSERT INTO cart (uid, pid, time) VALUES (1,55, NOW());
INSERT INTO cart (uid, pid, time) VALUES (1,3, NOW());
 
И как это запихнуть в БД? Писать парсер ?
chang
Сообщения: 125
Зарегистрирован: 2010.12.03, 20:01

Re: Не получается работать с AR

Сообщение chang »

имхо для начала стоит прочитать
это http://yiiframework.ru/doc/guide/ru/index
и это http://yiiframework.ru/doc/blog/ru/start.overview
и еще это http://yiiframework.ru/doc/cookbook/ru/index

ну а ответ на последний вопрос можно найти здесь http://yiiframework.ru/doc/guide/ru/database.dao
Jampire
Сообщения: 207
Зарегистрирован: 2011.01.28, 11:45
Откуда: Гомель
Контактная информация:

Re: Не получается работать с AR

Сообщение Jampire »

filonme писал(а):И как это запихнуть в БД? Писать парсер ?
Откуда пришло? Данным можно доверять? Почему сначала выше вы используете AR и в ручную задаете свойства, а теперь оказывается, что это простой запрос? Пихать, как и везде, или сразу все или через подготовленные запросы. Почитайте: http://yiiframework.ru/doc/guide/ru/database.dao , пункт "Исполнение SQL-выражений".
Изображение
Человек, говорящий, что это невозможно сделать, не должен мешать тому, кто это делает.
filonme
Сообщения: 11
Зарегистрирован: 2012.02.21, 23:35

Re: Не получается работать с AR

Сообщение filonme »

Jampire писал(а): Откуда пришло? Данным можно доверять? Почему сначала выше вы используете AR и в ручную задаете свойства, а теперь оказывается, что это простой запрос? Пихать, как и везде, или сразу все или через подготовленные запросы. Почитайте: http://yiiframework.ru/doc/guide/ru/database.dao , пункт "Исполнение SQL-выражений".
Отвечу и наверное поясню.

То что я спрашивал выше по AR - это для разработки да и вообще для понимания yii.
А вот по поводу запросов... Они приходят одним файлом, доверять можно.

Т.е. есть сервер на котором парсется файл и создается insert.sql который оказывается на фтп.
Его надо загнать в бд.

наполенение insert.sql примерно

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

INSERT INTO cart (uid, pid, time) VALUES (1,1, NOW());
INSERT INTO cart (uid, pid, time) VALUES (1,2, NOW());
INSERT INTO cart (uid, pid, time) VALUES (1,55, NOW());
INSERT INTO cart (uid, pid, time) VALUES (1,3, NOW());
 
Все это я конечно образно описал, но как то так.
Т.е. в итоге я получаю публичную переменную $sql = "запрос";

Безопасность тут не важна, т.к. это все дело происходит во внутренней сети отключенной от обычного интернета.
Ответить