Русскоязычный форум, посвященный фреймворку Kohana
http://forum.kohanaframework.su/

Не понимаю как работать с внешними ключами?!
http://forum.kohanaframework.su/viewtopic.php?f=33&t=618
Страница 1 из 1

Автор:  Deric [ 20 апр 2013, 11:23 ]
Заголовок сообщения:  Не понимаю как работать с внешними ключами?!

День бобрый!
Стоит простая задача: в табличке "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, 'Тест') ]


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

Автор:  Sergey [ 20 апр 2013, 14:43 ]
Заголовок сообщения:  Re: Не понимаю как работать с внешними ключами?!

О проблеме
https://www.google.ru/search?q=foreign+ ... aint+fails

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

Автор:  Deric [ 21 апр 2013, 19:35 ]
Заголовок сообщения:  Re: Не понимаю как работать с внешними ключами?!

Боюсь что у меня в данном случае "смотрю в книгу - вижу фигу" ...
Код:
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" записать =( Может там по другому ссылку надо указывать? Не пониаю ...

Автор:  Sergey [ 21 апр 2013, 22:34 ]
Заголовок сообщения:  Re: Не понимаю как работать с внешними ключами?!

Судя по сообщению о ошибке можно сказать, что вы используете ссылочную целостность основанную на внешних ключах InnoDB. Если вы не нашли время чтоб разобраться в этом, а просто скопипастили кусок кода, то видимо всё таки сейчас придётся найти время, чтоб разобраться в этом. Как то так ;)

Автор:  Deric [ 22 апр 2013, 00:11 ]
Заголовок сообщения:  Re: Не понимаю как работать с внешними ключами?!

Как все же тяжело нубам жить на свете =((
Перечитав 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 я всё чаще и чаще задумываюсь о возврате к изучению корейско - точно так же ни фига не понятно =(

Автор:  Sergey [ 22 апр 2013, 22:06 ]
Заголовок сообщения:  Re: Не понимаю как работать с внешними ключами?!

Что бы проще разобраться, для начала, разберитесь что конкретно и в каких случаях возвращает get_user()

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

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

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

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


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

Страница 1 из 1 Часовой пояс: UTC + 4 часа [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/