/**
* Multiple-fields (e.g. select or checkbox) with numberic keys are stored as CSV to improve filters.
*/
private function convertSerializedValues()
{
$t = Attribute::getTable();
$fields = array();
$attributes = Attribute::findBy(array("{$t}.multiple='1' AND {$t}.optionsSource='foreignKey'"), null);
if (null !== $attributes) {
/** @var Attribute $attribute */
foreach ($attributes as $attribute) {
if ($attribute instanceof IsotopeAttributeWithOptions) {
$fields[] = $attribute->field_name;
}
}
}
if (!empty($fields)) {
/** @var \Database\Result|object $products */
$products = $this->db->execute("\n SELECT id, " . implode(', ', $fields) . "\n FROM tl_iso_product\n WHERE " . implode(" IS NOT NULL OR ", $fields) . " IS NOT NULL\n ");
while ($products->next()) {
$set = array();
foreach ($fields as $field) {
$value = deserialize($products->{$field});
if (!empty($value) && is_array($value)) {
$set[$field] = implode(',', $value);
}
}
if (!empty($set)) {
$this->db->prepare("UPDATE tl_iso_product %s WHERE id=?")->set($set)->execute($products->id);
}
}
}
}