小编PLM*_*M57的帖子

Yii2:ActiveQuery"with"无效

情况

我有三个模型/ db-tables与1:n相关:一个order有多个commissions,一个佣金有多个commission_positions.因此,commission_position具有包含佣金ID的FK字段.佣金本身有一个包含订单ID的FK字段.

订单>委员会> CommissionPositions

问题

我现在需要做的是选择相关订单模型中具有特定值的所有CommissionPositions.显而易见的解决方案是使用CommissionPosition的Query-Object,我使用命名范围进行扩展.命名范围如下所示:

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

该关系commission在委员会模型和工作中定义.第二种关系order是在佣金模型上定义的,也是有效的.过滤后的字段alpha_order_id位于订单表中.现在我执行这样的查询:

$filteredPositions = CommissionPosition::find()->alphaOrderId(17)->all();
Run Code Online (Sandbox Code Playgroud)

成功调用范围并使用where-part,但是当我检查生成的SQL时,我看不到连接语句,即使我使用with-method告诉yii一起获取关系.响应是'未知列alpha_order_id',这是有意义的,因为没有连接到相关表.这是生成的SQL:

SELECT * FROM `commission_position` WHERE (`alpha_order_id`=17)
Run Code Online (Sandbox Code Playgroud)

我错过了什么?这是Yii2的错误吗?

yii2

5
推荐指数
1
解决办法
4549
查看次数

Yii2:急于选择计算列并将值加载到模型属性中

我以为我同时了解Yii2的各个方面,但这让我头疼。

情况

两个表:客户和帐单。客户表包含一个常规的客户列表。计费表为每个客户有多个条目(1:n)。

问题

我想获取计算的DB字段以及行本身,并通过模型的虚拟属性访问它。

关键是它与行本身一起被计算和选择。我知道我可以用一个常规的虚拟吸气剂来计算出类似的数量……但这与选择本身不同。

我的计划

在客户端模型的查询对象中,我尝试添加一个附加选择(addSelect-Method)并为该字段提供别名。然后,我将该选择的别名与模型的属性方法一起添加。不知何故,这行不通。

我的问题

你们当中有人知道实现此目标的正确方法吗?因为这是一个非常普遍的问题,所以我无法想象这件事太难了。我只是以某种方式找不到解决方案。

示例代码: echo $client->sumOfBillings应在客户端模型中输出相应属性的内容。该属性的内容应在获取客户端行本身时填充,而不是在调用该属性时填充。

activerecord yii2

1
推荐指数
1
解决办法
3004
查看次数

MySQL:不尊重"null"值的唯一索引

null在MySQL v5.6.20中创建一个尊重值的唯一索引时遇到了问题.我在这里查了类似的答案.但无法解决我的问题.

期望的行为

我想要一个引用另外三个table(date_list_assignment)的表.该表的目的是将date_list条目映射到课程类别和/或date_list类别.因此,第一列是强制性的,而后两列则不是.如果后两个是null日期列表,则条目被声明为全局.如果日期列表条目在此表中没有条目,则它不会显示在任何位置.

以下是条目的一些示例及其含义:

# entry which is global within course category 2
date_list_id: 1, course_category_id: 2, date_list_category_id: null

# entry which is global
date_list_id: 1, course_category_id: null, date_list_category_id: null

# entry which is only visible within course category 2 and date list category 17
date_list_id: 1, course_category_id: 2, date_list_category_id: 17
Run Code Online (Sandbox Code Playgroud)

简短版本:我想确保三列中的任何组合在表中保持唯一...无论值是否为空.

表模式

我有下表:

CREATE TABLE `date_list_assignment` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `date_list_id` int(11) NOT NULL,
  `course_category_id` int(11) DEFAULT …
Run Code Online (Sandbox Code Playgroud)

mysql constraints

1
推荐指数
1
解决办法
3251
查看次数

标签 统计

yii2 ×2

activerecord ×1

constraints ×1

mysql ×1