0 Пользователей и 1 Гость просматривают эту тему.
  • 8 Ответов
  • 2747 Просмотров
*

vova.olar

  • Осваиваюсь на форуме
  • 22
  • 1 / 0
Изменения в работе JTable
« : 27.01.2011, 13:57:43 »
Допустим имеем следующий код:

Код
$tbl = JTable::getInstance('TblName', 'prefix');
$tbl->load(0);
// либо $tbl->load();
// либо $tbl->load('');

в Joomla! 1.5 возвращал FALSE, что в принципе логично т.к. записи с таким первичным ключом в базе нет.
в Joomla! 1.6 возвращает TRUE (но FALSE при указании несуществующего первичного ключа)
тоесть в 1.6 TRUE возвращается для пустого ключа

Кто-то может обьяснить для какой светлой цели было сделано подобное поведение?
Тем кто проверял таким образом существование записи в БД придется переписывать рабочий в 1.5 код...
*

smart

  • Администратор
  • 6478
  • 1318 / 15
  • Хочешь сделать хорошо — сделай!
Re: Изменения в работе JTable
« Ответ #1 : 27.01.2011, 14:26:00 »
Ну если посмотреть код, то в Joomla 1.6 он несколько отличается:

Код: php
		// Check for a database error.
if ($this->_db->getErrorNum()) {
$e = new JException($this->_db->getErrorMsg());
$this->setError($e);
return false;
}

// Check that we have a result.
if (empty($row)) {
$e = new JException(JText::_('JLIB_DATABASE_ERROR_EMPTY_ROW_RETURNED'));
$this->setError($e);
return false;
}

// Bind the object with the row and return.
return $this->bind($row);

и в Joomla 1.5:
Код: php
		if ($result = $db->loadAssoc( )) {
return $this->bind($result);
}
else
{
$this->setError( $db->getErrorMsg() );
return false;
}

По логике Joomla 1.6 ошибка будет в 3-х случаях:
1. произошла ошибка в SQL
2. вернулся пустой результат
3. в процессе маппинга результата на объект произошла ошибка

Отсутствие записи по указанному ключу должно попадать под 2-й пункт. Другое дело, если посмотреть описание параметра, мы заметим:

Цитировать
An optional primary key value to load the row by, or an array of fields to match.  If not set the instance property value is used.

Вот последнее предложение может быть вполне критичным - мы же имеем дело с singleton'ом, т.е. получается может быть использовано значение от предыдущего вызова.
*

vova.olar

  • Осваиваюсь на форуме
  • 22
  • 1 / 0
Re: Изменения в работе JTable
« Ответ #2 : 27.01.2011, 16:46:34 »
Код
if (empty($keys)) {
// If empty, use the value of the current key
$keyName = $this->_tbl_key;
$keyValue = $this->$keyName;

// If empty primary key there's is no need to load anything
if (empty($keyValue)) {
return true;
}

        ...
}

>> If empty primary key there's is no need to load anything
Вот не пойму почему? И почему возвращается TRUE? Ведь сейчас запрос не делался и предыдущего вызова не было (судя по пустому $keyValue)...
« Последнее редактирование: 27.01.2011, 16:51:29 от vova.olar »
*

smart

  • Администратор
  • 6478
  • 1318 / 15
  • Хочешь сделать хорошо — сделай!
Re: Изменения в работе JTable
« Ответ #3 : 27.01.2011, 16:54:33 »
Хм, похоже на баг. Запости это в баг-треккер, я думаю они быстро отреагируют. Можешь потом скинуть сюда номер ошибки, я по своим каналам попробую ее продвинуть к рассмотрению.
*

vova.olar

  • Осваиваюсь на форуме
  • 22
  • 1 / 0
*

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
*

smart

  • Администратор
  • 6478
  • 1318 / 15
  • Хочешь сделать хорошо — сделай!
Re: Изменения в работе JTable
« Ответ #6 : 28.01.2011, 11:36:43 »
Поздравлять можно будет, когда станет ready to commit. А пока, что даже патча нет. И, насколько я понимаю, они сами еще не знают, что с этим делать.
*

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
Re: Изменения в работе JTable
« Ответ #7 : 28.01.2011, 11:51:37 »
Поздравлять можно будет, когда станет ready to commit. А пока, что даже патча нет.
Дык я просто поздравил vova.olar с пойманным багом ;)
Цитировать
И, насколько я понимаю, они сами еще не знают, что с этим делать.
Да они вообще потеряны... Где блин 1.6.1? Уже столько накопилось, а патча все нет и нет...
*

smart

  • Администратор
  • 6478
  • 1318 / 15
  • Хочешь сделать хорошо — сделай!
Re: Изменения в работе JTable
« Ответ #8 : 28.01.2011, 12:39:44 »
Ну там просто есть целая пачка исправлений, которые пока еще не оттестировали. Почти каждый день на канале группы локализации просят проверить тот или иной патч.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

JTable - что это?

Автор ZloiOrk

Ответов: 46
Просмотров: 7291
Последний ответ 13.05.2020, 16:48:26
от vitalicc