Ответ, как всегда, оказался проще простого.
Создаём в модели геттер
public function getAssociatedArray()
{
return $this->getAssociatedProducts()->select('id')->column();
}
На выходе получаем массив с нужными id, все категории, которые привязаны к продукту, ну или наоборот, все категории, к которым привязан продукт.
Теперь в форме этот геттер можно использовать так:
<?= $form->field($model, 'associatedArray')->dropDownList(Catalog::getChildCategoryList(),
[
'multiple' => true,
'class' => 'select-multiple',
'style' => 'width:100%;',
])
?>
При создании новой записи мы получим все категории, из которых можно выбрать несколько для продукта.
При обновлении записи мы получим все категории, к которым привязан продукт.
p.s. Это только малая часть кода, которая не даёт возникать ошибке
Call to a member function isAttributeRequired() on array
Для того, чтобы сохранить данные в базе - надо расширять данный код, дописывать функционал.
p.s.s Ответ подсмотрел у одного хорошего человека)))