Cakephp3 可以保存数据但不能保存关联

Cakephp3 able to save data but cannot save associations

您好,我正在尝试通过 Cakephp3 框架保存数据。我有两个 tables Measures 和 MeasuresUsers。 Measures 有很多 MeasuresUsers

$data = [
 'name' => $this->request->data['name'],
 'description' => $this->request->data['description'],
 'deleted' => $this->request->data['deleted'],
 'chart_type' => $this->request->data['chart_type'],
 'public' => $this->request->data['public'],
 'user_id' => $this->request->data['user_id']
];
$measure = $this->Measures->newEntity($data,['associated' => ['MeasuresUsers']]);

$measure['measures_users'] = [
                    'user_id' => $user['id'],
                    'chart_type' => $this->request->data['chart_type'],
                    'deleted' => $this->request->data['deleted'],
                    'public' => $this->request->data['public']
];
$this->Measures->save($measure)

我可以将数据保存到 Measures table 中,但不能保存到关联 table (MeasuresUsers) 中。我不确定我在这里遗漏了什么,欢迎任何帮助或评论!

来自 CakePHP 2.x,我看到你的关联模型是 MeasuresUsers

当您在

中设置关联数据时
$measure['measures_users'] = [
    'user_id' => $user['id'],
    'chart_type' => $this->request->data['chart_type'],
    'deleted' => $this->request->data['deleted'],
    'public' => $this->request->data['public']
];

尝试将 $measure['measures_users'] 更改为 $measure['MeasuresUsers']:

$measure['MeasuresUsers'] = [
    'user_id' => $user['id'],
    'chart_type' => $this->request->data['chart_type'],
    'deleted' => $this->request->data['deleted'],
    'public' => $this->request->data['public']
];

CakePHP 的模型约定通常假定您在数据库中拥有的内容的驼峰式大小写,例如DB Table 它 movie_tickets 和 Cake 期望的是 MovieTicket 除非在模型本身中另有声明。

@HarryM。很接近,但是您想在创建实体之前将数据放入 $data 数组(如果您不提供该数据,associated 标记就有点毫无意义!),因为它是一个 hasMany 关系,我认为您需要将数据放在数组的数组中:

$data = [
    'name' => $this->request->data['name'],
    'description' => $this->request->data['description'],
    'deleted' => $this->request->data['deleted'],
    'chart_type' => $this->request->data['chart_type'],
    'public' => $this->request->data['public'],
    'user_id' => $this->request->data['user_id'],
    'measures_users' => [
        [
            'user_id' => $user['id'], // Should this be $this->request->data['user_id'] instead?
            'chart_type' => $this->request->data['chart_type'],
            'deleted' => $this->request->data['deleted'],
            'public' => $this->request->data['public'],
        ],
    ],
];
$measure = $this->Measures->newEntity($data, ['associated' => ['MeasuresUsers']]);

$this->Measures->save($measure);