我有一个客户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('*');
}