Jump to content

Все null поля обнуляются в БД


Recommended Posts

Есть стандатрный кусок кода который сохраняет одно поле в БД

$dropOrder = new DropOrder($dropOrderId);
$dropOrder->is_supplier_paid = $payValue;
$dropOrder->save();

Он работает и поле сохраняется, но все null поля в текушей строке БД обнуляются.

Пробовал делать вот так:

$dropOrder->save(true);

Не помогает. Как сделать так, чтобы необнулялись никакие поля в БД, а сохранялось лишь одно значение.

Версия престы 1.5.4.1

 

Заранее благодарен.

Edited by topall (see edit history)
Link to comment
Share on other sites

Есть стандатрный кусок кода который сохраняет одно поле в БД

$dropOrder = new DropOrder($dropOrderId);
$dropOrder->is_supplier_paid = $payValue;
$dropOrder->save();

Он работает и поле сохраняется, но все null поля в текушей строке БД обнуляются.

Пробовал делать вот так:

$dropOrder->save(true);

Не помогает. Как сделать так, чтобы необнулялись никакие поля в БД, а сохранялось лишь одно значение.

Заранее благодарен.

Как понять обнуляются?

Link to comment
Share on other sites

Как понять обнуляются?

У Меня была строка в базе данных, в ней некоторые значения были null. Будь то числовые, строковые поля -- неважно. После сохранения значения с помощью метода save() поля со значения null полей становится 0, если это  число либо 0000-00-00 -- для даты. 

Посмотрел реализацию метода

public function save($null_values = false, $autodate = true)
{
return (int)$this->id > 0 ? $this->update($null_values) : $this->add($autodate, $null_values);
}

Пробовал делать $null_values = true. Не помогло. Хотя, должно было по идее. Версия престы 1.5.4.1

Edited by topall (see edit history)
Link to comment
Share on other sites

Так и должно быть. Функция formatValue в classes/ObjectModel.php в соответсвии с типом данных форматируеК

 

Как этого избежать? Зачем тогда нужен параметр $null_values в функции save()? Как я понял, именно по нему в итоге идет проверка в функции Db->update():

$sql .= ($null_values && ($value['value'] === '' || is_null($value['value']))) ? "`$key` = NULL," : "`$key` = '{$value['value']}',";
Link to comment
Share on other sites

Вот, что посоветовали на stackoverflow.com:

Values are formated by ObjectModel::formatValue() before they are inserted / updated, based on the type of the field declared in your $definition.

You have to use TYPE_NOTHING to allow NULL values, it's the only way.

Take a look in Configuration class, with id_shop and id_group_shop fields.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...