1.table product id title status-> 1
2.table order (intermediate) prodict_id user_id status 1
3.table user id name email
you need to get product.title, user.name, user.email where the status proudct.status = 1, order.status = 1 sql I wrote,
SELECT `user`.`username`, `user`.`email`, `product`.`title` FROM `user` LEFT JOIN `order` ON `order`.`user_id` = `user`.`id` LEFT JOIN `product` ON `order`.`product_id` = `product`.`id` AND `product`.`status` = 1 WHERE `order`.`status` = 1 But how can I do this in equating records, I can not understand. it may be more convenient to specify conditions in the entity type
public function getOrders() { return $this->hasMany(Product::className(), ['id' => 'product_id']) ->viaTable('order', ['user_id' => 'id']) ->where('status' => 1); //пробовал разные варианты onCondition и т.д. //вычитал что может лучше укаызвать via, но что-то тоже //ничего не поулчается. } controller code
$users = User::find() ->joinWith([ 'orders' ])->all(); 
$users = User::find()->joinWith(['orders'])->andWhere(["orders.status" => 1])->all();- Peresadauser. * FROMuserLEFT JOINorderONuser.id=order.user_idLEFT JOINproductONorder.product_id=product.idWHERE (order.status= 1) AND (product.status= 1) - ProMix