我的 RESTful API 需要存储来自JSON POST / PUT请求的关系数据:
地址表通过表addresscategory_assignment有很多类别:
public function getAddresscategories()
{
return $this->hasMany(TblAddresscategory::className(), ['id' => 'addresscategory_id'])
->viaTable('tbl_addresscategory_assignment', ['address_id' => 'id']);
}
阅读和保存关系数据的最佳方法是什么?
Yii2仅在GET请求中支持关系REST,但在POST / PUT内不支持。
通过REST PUT进入的地址-JSON:
{
"id": 1,
"name": "Miller",
"addresscategories": [
{
"id": 9,
"categories": "customer"
},
{
"id": 10,
"gruppe": "reseller"
}
]
}
地址类别已经存在,我只需要阅读关系并将它们存储到tbl_addresscategory_assignment
答案 0 :(得分:0)
一种方法可能是将 EVENT_AFTER_INSERT 的有效记录事件附加到您正在创建新条目的模型上。然后,在从post / put插入数据之后,您可以根据刚刚插入的模型的ID创建赋值关系。
事件将允许您处理数据而不会破坏内置的REST URL结构
这是一个不知道表格结构的简单例子......
public function init()
{
$this->on(ActiveRecord::EVENT_AFTER_INSERT, function ($event) {
// Category ID just created
$firstid = $event->sender->id;
// Whatever the second ID is
$secondid = 999;
$assignment = new CategoryAssignment;
$assignment->setAttribute('firstid', $firstid);
$assignment->setAttribute('secondid', $secondid);
$assignment->save();
}
}
答案 1 :(得分:0)
您可以结帐this post讨论RESTful API中的多对多关系。有很多关于最佳方法的讨论,但这实际上取决于什么是最适合您的应用程序。
对于多对多关系,我倾向于为关系本身创建资源,在您的情况下为addresscategory_assignment
资源。这将表示tbl_addresscategory_assignment
表中的条目,如下所示:
GET http://my.api/relationships/addresscategory_assignment
{
table_id: 6,
address_id: 15
category_id: 2
}
以这种方式揭露这种关系有一些好处:
extraFields
方法以及expand
GET参数来获取相关对象。缺点是现在有额外的资源,你经常需要额外的一两个API调用才能完成任务。