Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.05.2014, 20:49   #1
Blondy
Участник клуба
 
Аватар для Blondy
 
Регистрация: 07.07.2009
Сообщений: 1,385
По умолчанию Kohana ORM: получение id последней записи

Дорогие форумчане, мне надо сделать такой хитрый ход - сделать вначале запись в одну таблицу, получить ид последней записи и перенести этот ид с дополнительными данными в другую таблицу.

В Интернете рекомендуют воспользоваться в случае ORM следующим методом:
Код:
  $kids = new Model_Child(); // создаем объект  - новый ребенок
 $kids->values(array(
                   //здесь мы заносим в базу данных данные из формы
                 ));
                    $kids->save(); //сохраняем данные в базе  - код работает корректно



  $newChild = $kids->id_child;//Получаем id новой записи (только что внесенной в таблицу)
                    
                    $kidsParent = new Model_childparents;// создаем оъект из таблицы, связывающей детей и родителей
                    $kidsParent->values(array(
                    'parent' => 10, //это пока просто тестовое значение
                     'child' => $newChild,   //а вот это мы записываем наш послений ид нового ребенка
                   
                 ));
                    $kidsParent->save();
Проблема в том, что эта теоретическая идея, условно
Код:
$obj->save();
$obj->last_id;
заносит почему-то в итоговую таблицу запись под id, равной 1 - то есть первая запись из таблицы Дети, но никак не последнюю. А почему, мы же обращаемся к объекту,созданному последним, он же заносит данные в таблицу дети корректно, например, под ид = 25, так вот мы эти 25 и должны по идее получить, если запросим у последнего созданного объекта его ид. Но никак не 1.

Может я что-то недопонимаю? Мне бы не хотелось писать обычный запрос, все-таки это технология ORM и мы можем обратиться к конкретному объекту напрямую и запросить его id.

Надеюсь на Вашу консультацию, как грамотно получить id последней записи именно на основании методологии ORM.
"Все мы жаждем чудес. Чисто человеческое свойство." Carl Sagan

Последний раз редактировалось Blondy; 19.05.2014 в 20:51.
Blondy вне форума Ответить с цитированием
Старый 19.05.2014, 21:33   #2
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Как получить в KO3 ID последней вставки
Andkorol вне форума Ответить с цитированием
Старый 19.05.2014, 22:14   #3
Blondy
Участник клуба
 
Аватар для Blondy
 
Регистрация: 07.07.2009
Сообщений: 1,385
По умолчанию

В том то вся и соль, что именно так, как в этом примере, ссылку на который Вы мне любезно предоставили, я в коде и делаю. Но получаю я в результате не последнюю запись из таблицы, а вообще самую-самую первую, существующую в таблице. Вот я и удивляюсь - почему? Вроде бы тоже использую автосчетчик, и тоже обращаюсь к только-что созданному и сохраненному объекту, который должен видеть только себя и свой ид (по идее последний в таблице). Добавляю только одну запись.
"Все мы жаждем чудес. Чисто человеческое свойство." Carl Sagan
Blondy вне форума Ответить с цитированием
Старый 19.05.2014, 22:46   #4
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

$obj->pk(); тоже не работает?
Поле с ID указано, как PRIMARY KEY?

Последний раз редактировалось Andkorol; 19.05.2014 в 22:55.
Andkorol вне форума Ответить с цитированием
Старый 20.05.2014, 00:18   #5
Blondy
Участник клуба
 
Аватар для Blondy
 
Регистрация: 07.07.2009
Сообщений: 1,385
По умолчанию

Работать-то работает, но выдает все-равно самый первый ид в таблице.
То есть
Код:
$kids->pk();
выдает почему-то 1, вместо 25, скажем.

да, поле с ид это Primary_key.
"Все мы жаждем чудес. Чисто человеческое свойство." Carl Sagan

Последний раз редактировалось Blondy; 20.05.2014 в 00:21.
Blondy вне форума Ответить с цитированием
Старый 20.05.2014, 00:22   #6
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Странно.
Что покажет var_dump($kids); после save()?
Andkorol вне форума Ответить с цитированием
Старый 20.05.2014, 02:37   #7
Blondy
Участник клуба
 
Аватар для Blondy
 
Регистрация: 07.07.2009
Сообщений: 1,385
По умолчанию

Показывает все переменные запроса. Но приложение не показывает конкретно цифру id, а показывает название последовательности, задающей автономер и следующее значение - уже 41.
Кстати, может быть приложение может быть из-за этой последовательности в Postgre так ловко и не получается считать ид последней записи.

Ладно, здесь просто какая-то путаница. Я уже сделала обычным desc limit(1). Пусть коряво, но зато сработало, как часы.
Спасибо Вам за консультацию и за полезную функцию.

Извините, я пока не могу Вам плюсовать - система не разрешает.
"Все мы жаждем чудес. Чисто человеческое свойство." Carl Sagan

Последний раз редактировалось Blondy; 20.05.2014 в 02:39.
Blondy вне форума Ответить с цитированием
Старый 20.05.2014, 10:13   #8
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от Blondy Посмотреть сообщение
показывает название последовательности, задающей автономер и следующее значение - уже 41.
...
Я уже сделала обычным desc limit(1).
Так может можно для получения ID текущей записи просто отнимать единицу от этого самого «следующего значения» – это и будет нужный вам ID?
Это позволит избежать лишнего запроса desc limit(1).
Andkorol вне форума Ответить с цитированием
Старый 20.05.2014, 10:20   #9
buriat
Форумчанин
 
Регистрация: 28.06.2010
Сообщений: 189
По умолчанию

Код:
select lastval();
select currval(mysequence_seq);
что мешает добавить новый или поправить неработающий функционал в орм?
buriat вне форума Ответить с цитированием
Старый 20.05.2014, 22:46   #10
Blondy
Участник клуба
 
Аватар для Blondy
 
Регистрация: 07.07.2009
Сообщений: 1,385
По умолчанию

Спасибо Вам большое, дорогие мальчики, за консультацию!
"Все мы жаждем чудес. Чисто человеческое свойство." Carl Sagan
Blondy вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Kohana 3 ORM: почему контроллер не видит checkbox с формы? Blondy PHP 5 15.05.2014 22:32
Вывод последней записи из таблицы mysql NapalmRain PHP 4 24.06.2011 14:41
ORM валидация в Kohana Anoobis PHP 2 10.06.2011 15:12
Ключ последней обновленной записи masterdela SQL, базы данных 7 18.12.2010 15:47
Поиск последней записи в определенной строке Maxx Microsoft Office Excel 5 04.03.2009 14:01