#cakephp #cakephp-4.x
#cakephp #cakephp-4.x
Вопрос:
Я создаю простой API с помощью CakePHP 4, и у меня возникают некоторые проблемы с сохранением некоторых данных POST. Это новый проект, поэтому модели недавно созданы на основе моих 3 таблиц: , elaborations
details
, jobs
ElaborationTable
Таблица имеет следующие отношения:
$this->hasOne('Details', [ // this (and the next) is the only thing that I've manually changed here: hasOne instead of hasMany
'foreignKey' => 'elaboration_id',
]);
$this->hasOne('Jobs', [
'foreignKey' => 'elaboration_id',
]);
В то время как оба DetailsTable
и JobsTable
имеют это:
$this->belongsTo('Elaborations', [
'foreignKey' => 'elaboration_id',
'joinType' => 'INNER',
]);
В моем контроллере это то, что я использую для извлечения данных POST и сохранения их в каждой таблице базы данных:
$data = $this->request->getData();
$data['user_id'] = $this->Auth->user('id');
$elaboration = $this->Elaborations->newEntity($data, [
'associated' => [
'Details',
'Jobs'
]
]);
Наконец, мои данные POST выглядят примерно так:
APP/Controller/ElaborationsController.php (line 85)
[
'detail' => [
'regione' => 'Lazio',
'provincia' => 'RM',
'comune' => 'Roma',
],
'job' => [
'serramenti' => '1',
],
'user_id' => (int) 2,
]
Теперь user_id
поле сохраняется в моей elaborations
таблице, ошибок не выдается, но details
jobs
таблицы and по-прежнему остаются пустыми, данные не сохраняются.
Что я делаю не так?
Комментарии:
1. Доступны
detail
ли иjob
в вашем объекте разработки?2. Черт, ты заставил меня увидеть проблему. Те значения, которые доступны, но во множественном числе
details
иjobs
. Это потому, что команда bake написала это таким образом… Я установил для него значениеdetail
иjob
, и теперь оно работает. Большое спасибо!3. К вашему сведению, bake не может различить
hasOne
иhasMany
, поскольку в обоих случаях внешний ключ находится в целевой таблице, а расположение внешнего ключа — единственный намек на определение типа ассоциации. Из-за этого bake будет пытаться только обнаружитьhasMany
, и таким образом вы получите имена во множественном числе.4. Я предполагаю, что, возможно, bake может проверить наличие уникального индекса во внешнем ключе, если он присутствует, тогда можно предположить, что это должна быть
hasOne
ассоциация.5. @ndm автоматизировать его с помощью уникального индекса было бы неплохо, но, на мой взгляд, это не имеет большого значения, я виноват, что пропустил это … возможно, добавления простого комментария, объясняющего, что нужно изменить для
hasOne
ассоциаций, было бы достаточно даже для невнимательных людей, как я был сегодня-