Yii2 Rest结果中的嵌套关​​系

时间:2017-08-03 19:06:46

标签: yii2

我有一个客户table和一个user表,他们在user_has_customer中设置了M:M关系。

整个应用程序是一个Rest API,我在查看客户时使用extraFields()GET customers?expand=users来联系用户。

user_has_customer存储有关何时将用户分配给客户和其他一些字段的一些其他信息,并且多个字段可以具有相同的用户和客户组合。为了能够更新或删除关系,我需要在查看客户时看到关系id(user_has_customer.id)。

此功能将返回客户及其相关用户:

public function getUsers() {
    return $this->hasMany(User::className(), ['id' => 'user_id'])
        ->viaTable('user_has_customer', ['customer_id' => 'id'])
        ->select(['id', 'username']);
}

此功能将返回用户 - 客户关系:

public function getUserRelations() {
    return $this->hasMany(UserHasCustomer::className(), ['customer_id' => 'id'])
        ->select(["id",
            "customer_id",
            "user_id",
            "created_by",
            "created_at"]);
}

但我想知道如何嵌套这些关系,所以结果如下:

{
    "id": 11148,
    ....
    "users": {
        "id": 1,
        "user_id": 1,
        "added": "2017-08-01 22:23:24"
        "user": {
            "id": 1,
            "username": "admin"
        }
    }
}

或甚至喜欢这样(如MySQL加入):

{
    "id": 11148,
    ....
    "users": {
        "id": 1,
        "user_id": 1,
        "added": "2017-08-01 22:23:24"
        "username": "admin"
    }
}

由于某种原因,这不起作用(创建的SQL 正确,但AR拒绝在结果中显示user中的字段):

public function getUserRelations() {
    return $this->hasMany(UserHasCustomer::className(), ['customer_id' => 'id'])
        ->joinWith('user', true)
-       ->select('*');
}

0 个答案:

没有答案