Я хотел бы спросить, как сохранить связанные данные, используя REST в CakePHP3?
Чтобы предположить, что у меня есть следующая ассоциативная команда, может иметь много связанных тегов (см. Диаграмму EER ниже, пожалуйста).
Структура запроса JSON следующая:
{
"command": "whoami",
"description": "SOMETHING",
"public": false,
"tags": [
{"name":"TEST1"},
{"name":"TEST2"}
]
}
Я пытался реализовать сохранение в ассоциациях, используя
https://book.cakephp.org/3.0/en/orm/saving-data.html#saving-with-associations
Но без удачи.
Итак, я сделал это следующим образом:
public function add()
{
$this->request->allowMethod(['post']);
$data = $this->request->getData();
$user = $this->CommonHelper->getUserByToken($this->token);
$command = $this->Commands->newEntity($data);
$tags = $data['tags'];
$command->user = $user;
$command = $this->Commands->patchEntity($command, $data);
if ($this->Commands->save($command)) {
if($tags != null)
$this->addTags($tags, $command);//TODO: DO IT IN THE RIGHT WAY WITH MARSHALLING
$this->apiResponse['data'] = $command;
$this->httpStatusCode = 200;
} else {
$this->httpStatusCode = 400;
}
}
private function addTags($tags, $command)
{
foreach ($tags as $value) {
$tag = $this->Tags->newEntity($value);
$tag->commands_id = $command->id;
$this->Tags->save($tag);
}
}
Но это единственное специальное решение, я хотел бы сделать этоправильно использовать возможности архитектуры CakePHP ORM.
Определение таблицы тегов следующее:
public function initialize(array $config)
{
parent::initialize($config);
$this->setTable('tags');
$this->setDisplayField('name');
$this->setPrimaryKey('id');
$this->belongsTo('Commands', [
'foreignKey' => 'commands_id',
'joinType' => 'INNER'
]);
}
Спасибо за любой совет.