Код: Выделить всё
public static function findByFilterParam($filterparamname){
return self::find()->joinWith('filters')->where(['IN','filters.name', $filterparamname])->all();
}
Код: Выделить всё
public static function findByFilterParam($filterparamname){
return self::find()->joinWith('filters')->where(['IN','filters.name', $filterparamname])->all();
}
Код: Выделить всё
public static function findByFilterParam($filterparamname){
return self::find()->where(['IN','filters.filters_id', $filterparamname])->all();
}
Код: Выделить всё
public static function findByFilterParam($filterparamname){
$i = 0;
$query = self::find();
foreach ($filterparamname as $filtername) {
$query->innerJoin("filters fl$i", "products.id = fl$i.product_id AND fl$i.name = $filtername");
$i++;
}
return $query->all();
}
Код: Выделить всё
public static function findByFilterParam($filterparamname){
$i = 0;
$query = self::find();
foreach ($filterparamname as $filtername) {
$query->innerJoinWith(["filters fl$i" => function ($q) {
$q->onCondition(["fl$i.name" => $filtername]);
}])
$i++;
}
return $query->all();
}
без join пишет Unknown column 'filters.filters_id' in 'where clause'unknownby писал(а): ↑2019.11.21, 08:50 Что если так?А в эту переменную $filterparamname должен поступать массив идентификаторов фильтровКод: Выделить всё
public static function findByFilterParam($filterparamname){ return self::find()->where(['IN','filters.filters_id', $filterparamname])->all(); }
в первом случае не работает, потому что у меня в таблице filters не содержится product_id ("products.id = fl$i.product_id ), как я и писал они связаны через промежуточную таблицу где есть product_id и filters_id.yiiliveext писал(а): ↑2019.11.21, 10:07или такКод: Выделить всё
public static function findByFilterParam($filterparamname){ $i = 0; $query = self::find(); foreach ($filterparamname as $filtername) { $query->innerJoin("filters fl$i", "products.id = fl$i.product_id AND fl$i.name = $filtername"); $i++; } return $query->all(); }
Код: Выделить всё
public static function findByFilterParam($filterparamname){ $i = 0; $query = self::find(); foreach ($filterparamname as $filtername) { $query->innerJoinWith(["filters fl$i" => function ($q) { $q->onCondition(["fl$i.name" => $filtername]); }]) $i++; } return $query->all(); }
Код: Выделить всё
public static function findByFilterParam($filterparamname){
$i = 0;
$query = self::find();
foreach ($filterparamname as $filtername) {
$query->innerJoinWith(["filters fl$i" => function ($q) use ($i, $filtername) {
$q->onCondition(["fl$i.name" => $filtername]);
}])
$i++;
}
return $query->all();
Код: Выделить всё
public static function findByFilterParam($filterparamname){
$i = 0;
$query = self::find();
foreach ($filterparamname as $filtername) {
$query->innerJoinWith(["filters fl$i" => function ($q) use ($i, $filtername) {
$q->onCondition(["fl$i.name" => $filtername]);
}])
$i++;
}
return $query->all();
Код: Выделить всё
select * from products p
left join filtersproducts fp1 on fp1.product_id = p.id
left join filters fp2 on fp2.id = fp1.filter_id
where fp2.name IN ('марка1', 'марка2')
group by p.id having count(*) > 1
Код: Выделить всё
public static function findByFilterParam($filterparamname){
return self::find()
->select(['p.*', 'cnt' => 'COUNT(p.id)'])
->from(['p' =>'products'])
->joinWith('filters')
->where(['IN','filters.name', $filterparamname])
->groupBy('p.id')
->having(['>', 'cnt', count($filterparamname)-1])
->all();
}
Код: Выделить всё
->having(['=', 'cnt', count($filterparamname)])
Код: Выделить всё
self::Products::find()
->select(['p.*'])
->from(['p' =>'products'])
->joinWith('filters')
->where(['IN','filters.name', $filterparamname])
->groupBy('p.id')
->having(['=', new \yii\db\Expression('COUNT(p.id)'), count($filterparamname)]);
Код: Выделить всё
public static function findByFilterParam($filterparamname){
$i = 0;
$query = self::find();
foreach ($filterparamname as $filtername) {
$query->innerJoin("filtersproducts fp$i", "products.id = fp$i.product_id")
->innerJoin("filters fl$i", "fp$i.filter_id = fl$i.id AND fl$i.name = '$filtername'");
$i++;
}
return $query->all();
}