Русскоязычный форум, посвященный фреймворку Kohana

Все о фреймворке Kohana. Обсуждение уроков, документации.
Текущее время: 29 мар 2024, 03:10

Часовой пояс: UTC + 4 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
СообщениеДобавлено: 20 апр 2013, 11:23 
Не в сети
Новичок
Аватара пользователя

Зарегистрирован: 21 мар 2013, 00:27
Сообщения: 21
Откуда: Земля
День бобрый!
Стоит простая задача: в табличке "table_name" записывать некоторые данные с указанием id юзера от имени которого запись делается. Соответственно я так понял делать это надо через внешний ключ! Для этого в табличке "table_name" я сделал колонку и прилепил ей связь:

Код:
ALTER TABLE `table_name` ADD FOREIGN KEY ( `iduser` ) REFERENCES `databasename`.`users` (`id`);

По простоте своей душевной, больше ни каких изменений в БД я не вносил ибо думал что достаточно в колонку iduser вставлять корректные значения из id таблицы users и все у меня будет пучком, но видать чего-то я таки не понимаю - то ли в Kohana, то ли в SQL ибо вот этот кусочек кода:
Код:
$newitem = ORM::factory('Mymodel');
$user = Auth::instance()->get_user();
$newitem->iduser = $user['id'];
$newitem->type = "R";
$newitem->reason = Arr::get($_POST, 'reason','');
$newitem->summ = -(Arr::get($_POST, 'summ',''));
$newitem->comment = Arr::get($_POST, 'comment','');
$newitem->create();

Выдает мне вот такую ошибку:

Код:
Database_Exception [ 1452 ]: Cannot add or update a child row: a foreign key constraint fails (`databasename`.`table_name`, 
CONSTRAINT `table_name_ibfk_1` FOREIGN KEY (`iduser`) REFERENCES `users` (`id`)) [ INSERT INTO `table_name` (`type`, `reason`, `summ`,
 `comment`) VALUES ('R', 'Тест', -100, 'Тест') ]


Подскажите плиз что читать, где искать и как примус сей починить?! Спасибо!


Последний раз редактировалось Deric 21 апр 2013, 20:11, всего редактировалось 2 раз(а).

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 20 апр 2013, 14:43 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 24 июл 2012, 18:00
Сообщения: 701
Откуда: Murom, Russia
О проблеме
https://www.google.ru/search?q=foreign+ ... aint+fails

О внешних ключах
http://phpclub.ru/mysql/doc/example-foreign-keys.html


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 21 апр 2013, 19:35 
Не в сети
Новичок
Аватара пользователя

Зарегистрирован: 21 мар 2013, 00:27
Сообщения: 21
Откуда: Земля
Боюсь что у меня в данном случае "смотрю в книгу - вижу фигу" ...
Код:
Database_Exception [ 1452 ]: Cannot add or update a child row: a foreign key constraint fails (`databasename`.`table_name`, 
CONSTRAINT `table_name_ibfk_1` FOREIGN KEY (`iduser`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE)
[ INSERT INTO `table_name` (`iduser`, `type`, `reason`, `summ`, `comment`) VALUES ('a', 'R', 'Тест3', -100, 'Ком3') ]

Я вообще не понимаю чего привязались к users`ам? Мне нужно данные в таблицу "table_name" записать =( Может там по другому ссылку надо указывать? Не пониаю ...


Последний раз редактировалось Deric 21 апр 2013, 22:53, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 21 апр 2013, 22:34 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 24 июл 2012, 18:00
Сообщения: 701
Откуда: Murom, Russia
Судя по сообщению о ошибке можно сказать, что вы используете ссылочную целостность основанную на внешних ключах InnoDB. Если вы не нашли время чтоб разобраться в этом, а просто скопипастили кусок кода, то видимо всё таки сейчас придётся найти время, чтоб разобраться в этом. Как то так ;)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 22 апр 2013, 00:11 
Не в сети
Новичок
Аватара пользователя

Зарегистрирован: 21 мар 2013, 00:27
Сообщения: 21
Откуда: Земля
Как все же тяжело нубам жить на свете =((
Перечитав kohana3 я решил что данный кусок кода будет правильным:
Код:
$newitem = ORM::factory('Mymodel');
$user = Auth::instance()->get_user();
$newitem->iduser = $user['id'];

однако на самом деле $user['id'] выдает NULL, соответственно и ругаеца на внешний ключ, как бы я там не издевался над настройками самой БД, проблема получается в том что ни:
Код:
$user = Auth::instance()->get_user();
$newitem->iduser = $user['id'];

ни
Код:
$user = Auth::instance()->get_user();
$newitem->iduser = $user->id;

не являются валидными способами получения id юзера ... Вопрос тогда: а как правильно?
Код:
$user = Auth::instance()->get_user();

Возвращает юзернейм и жутко не красивым выглядит поиск таким образом через orm непосредственно в таблице юзеров. А читая родную документацию по kohana я всё чаще и чаще задумываюсь о возврате к изучению корейско - точно так же ни фига не понятно =(


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 22 апр 2013, 22:06 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 24 июл 2012, 18:00
Сообщения: 701
Откуда: Murom, Russia
Что бы проще разобраться, для начала, разберитесь что конкретно и в каких случаях возвращает get_user()

Например, тип возвращаемого результата точно не объект, по крайней мере, если мне не отшибло память (я работаю с модифицированным классом Auth). А если я прав, то совершенно не верно использовать это так:
Код:
<?php $user->id

А ещё, если я все правильно помню, get_user() принимает параметр по умолчанию для тех случаев, когда вернуть нечего.
Т.е. вызвать его можно примерно так
Код:
<?php get_user(NULL

или так:
Код:
<?php get_user(0

или даже так:
Код:
<?php get_user(array()) 


Конечно всё это дело лучше поместить в какое нибудь условие на проверку существования в сессии чего нибудь, а именно оттуда get_user получает то, что вы от него хотите получить


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Часовой пояс: UTC + 4 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Все о фреймворке Kohana  | 
Powered by phpBB® Forum Software © phpBB Group