Может, попробуете relations Yii2?
В модели продуктов можно прописать связь (Relation) через связующую таблицу:
// Устанавливаем связь модели "Recipes" (Рецепты) с моделью "Products" (Продукты) с помощью связующей таблицы "recipes_products":
public function getProducts(){
// hasMany() устанавливает "множественную" связь, т.е. один ко многим.
return $this->hasMany(Products::className(), ['id' => 'product_id'])->viaTable('recipes_products', ['recipe_id' => 'id']);
}
А в модели поиска просто:
public function search($params)
{
$query = Recipes::find();
$dataProvider = new ActiveDataProvider([
'query' => $query,
]);
$this->load($params);
if (!$this->validate()) {
// Не возвращаем ничего в случае, если валидация не прошла
// $query->where('0=1');
return $dataProvider;
}
// Аналогично LEFT JOIN, только немного иное.
$query->joinWith('products');
$query->andFilterWhere(['NOT IN', 'recipes_products.product_id'/* связующая таблица */, $this->product_exclude/* массив id исключаемых продуктов */]);
// Здесь добавляем другие необходимые параметры поиска, например : $query->andFilterWhere(['products.id' => $this->product_id]);
return $dataProvider;
}
Но, кажется, я вас не полностью понял