Группа
Если необходимо связать записи между собой внутри одной таблицы, используется тип данных Группа group. Например, у товаров должны быть сопутствующие товары которые задаются для каждого товара индивидуально, а их количество может быть различным у каждого товара.
class Products extends Model
{
protected $name = 'Товары каталога';
protected $model_elements = [
['Активен', 'bool', 'active', ['on_create' => true]],
['Название', 'char', 'name', ['required' => true]],
['Цена', 'int', 'price', ['required' => true]],
['Позиция', 'order', 'order'],
['Раздел каталога', 'enum', 'parent', ['foreign_key' => 'Catalogs',
'is_parent' => true]],
['Изображения', 'multi_images', 'images'],
['Описание', 'text', 'desc', ['rich_text' => true]],
['Рекомендуемые товары', 'group', 'additional']
];
}
При извлечении данных из поля 'additional' их удобно подставлять в оператор 'field->in' или исключающий оператор 'field->not-in', описанный в разделе Конструктор запросов.
//Нашли нужный товар
$product = $mv -> products -> find(35);
//Извлекаем сопутствующие товары если они есть
if($product -> additional)
{
$rows = $mv -> products -> select(['active' => 1,
'order->asc' => 'order',
'id->in' => $product -> additional]);
foreach($rows as $row)
{
...
}
}
Альтернативным способом группировки товаров является добавление поля типа enum, когда каждому товару выбирается из выпадающего списка название его группы.
class Products extends Model
{
protected $name = 'Товары каталога';
protected $model_elements = [
...
['Рекомендуемые товары', 'enum', 'additional', ['values_list' => [
'hits' => 'Хиты',
'sale' => 'Распродажа']]]
];
}
Предыдущий раздел
Многие ко многим