First, you need to check that in you ddbb tables value for not cover images is NULL on ps_image and ps_image_shop. For me all the suggested fixes (dropping tables etc..) didn't work.
What I changed on objectmodel.php is function formatfields as this:
protected function formatFields($type, $id_lang = null)
{
$fields = array();
// Set primary key in fields
if (isset($this->id))
$fields[$this->def['primary']] = $this->id;
foreach ($this->def['fields'] as $field => $data)
{
// Only get fields we need for the type
// E.g. if only lang fields are filtered, ignore fields without lang => true
if (($type == self::FORMAT_LANG && empty($data['lang']))
|| ($type == self::FORMAT_SHOP && empty($data['shop']))
|| ($type == self::FORMAT_COMMON && (!empty($data['shop']) || !empty($data['lang']))))
continue;
if (is_array($this->update_fields))
if ((!empty($data['lang']) || !empty($data['shop'])) && (empty($this->update_fields[$field]) || ($type == self::FORMAT_LANG && empty($this->update_fields[$field][$id_lang]))))
continue;
// Get field value, if value is multilang and field is empty, use value from default lang
$value = $this->$field;
if ($type == self::FORMAT_LANG && $id_lang && is_array($value))
{
if (!empty($value[$id_lang]))
$value = $value[$id_lang];
else if (!empty($data['required']))
$value = $value[Configuration::get('PS_LANG_DEFAULT')];
else
$value = '';
}
$purify = (isset($data['validate']) && Tools::strtolower($data['validate']) == 'iscleanhtml') ? true : false;
// Format field value
//$fields[$field] = ObjectModel::formatValue($value, $data['type']);
$fields[$field] = ObjectModel::formatValue($value, $data['type'], false, false, !empty($data['allow_null']));
}
return $fields;
} Let me know if you want me to take a look