【发布时间】:2014-11-04 09:23:53
【问题描述】:
情况
我有三个与 1:n 相关的模型/数据库表:一个order 有多个commissions,一个委员会有多个commission_positions。因此,commission_position 有一个包含佣金 id 的 FK 字段。佣金本身有一个包含订单 ID 的 FK 字段。
订单 > 佣金 > 佣金头寸
问题
我现在需要做的是在相关的 Order-Model 中选择所有具有特定值的 CommissionPositions。明显的解决方案是使用我用命名范围扩展的 CommissionPosition 的查询对象。命名范围如下所示:
class CommissionPositionQuery extends ActiveQuery
{
/**
* Named scope to filter positions of a certain alpha order id
* @param integer $id the alpha order id
* @return \common\models\query\CommissionPositionQuery
*/
public function alphaOrderId($id)
{
//TODO: with not working
$this->with(['commission.order']);
$this->andWhere(['alpha_order_id'=>$id]);
return $this;
}
}
commission 的关系是在 Commission-Model 上定义的并且正在工作。第二个关系order 是在佣金模型上定义的,并且也可以正常工作。过滤字段alpha_order_id 在订单表中。现在我执行这样的查询:
$filteredPositions = CommissionPosition::find()->alphaOrderId(17)->all();
作用域被成功调用并使用了 where-part,但是当我检查生成的 SQL 时,即使我使用 with- 方法告诉 yii 一起获取关系,我也看不到连接语句。响应是“未知列 alpha_order_id”,这是有道理的,因为相关表没有连接。这是生成的 SQL:
SELECT * FROM `commission_position` WHERE (`alpha_order_id`=17)
我错过了什么?这是 Yii2 的 bug 吗?
【问题讨论】:
标签: yii2