在CakePHP 3中保存多个归属关联
首先让我解释一下我想要实现的目标。 3个MySQL表与此问题相关: 预设:在CakePHP 3中保存多个归属关联,php,mysql,cakephp,cakephp-3.0,Php,Mysql,Cakephp,Cakephp 3.0,首先让我解释一下我想要实现的目标。 3个MySQL表与此问题相关: 预设: id | name | description | user_id | ... 档案: id | name | size | ... 预设文件 id | file_id | preset_id | original_image (bool) | small_thumb (bool) | big_thumb (bool) | file (bool) 我正在创建的网站上有一个表单用于创建预设。 预设由以下部分组成:
id | name | description | user_id | ...
档案:
id | name | size | ...
预设文件
id | file_id | preset_id | original_image (bool) | small_thumb (bool) | big_thumb (bool) | file (bool)
我正在创建的网站上有一个表单用于创建预设。预设由以下部分组成:
- 3个图像:一个原始图像、一个小拇指和一个大拇指,都存储在
文件
表中
- 未知数量的文件,也存储在
表中files
表中存储的附加信息预设
files\u presets
表是我用来将每个预设链接到其文件和图像的。“原始图像”、“小拇指”、“大拇指”和“文件”列是布尔值,表示每个文件对预设的意义
这就是我在PresetsTable.php
文件中定义关联的方式:
$this->belongsToMany('OriginalImage', [
'through' => 'FilesPresets',
'className' => 'Files',
'property_name' => 'original_image',
'foreignKey' => 'preset_id',
'targetForeignKey' => 'file_id',
'conditions' => ['FilesPresets.original_image' => true]
]);
$this->belongsToMany('SmallThumb', [
'through' => 'FilesPresets',
'className' => 'Files',
'property_name' => 'small_thumb',
'foreignKey' => 'preset_id',
'targetForeignKey' => 'file_id',
'conditions' => ['FilesPresets.small_thumb' => true]
]);
$this->belongsToMany('BigThumb', [
'through' => 'FilesPresets',
'className' => 'Files',
'property_name' => 'big_thumb',
'foreignKey' => 'preset_id',
'targetForeignKey' => 'file_id',
'conditions' => ['FilesPresets.big_thumb' => true]
]);
$this->belongsToMany('Files', [
'through' => 'FilesPresets',
'className' => 'Files',
'property_name' => 'files',
'foreignKey' => 'preset_id',
'targetForeignKey' => 'file_id',
'conditions' => ['FilesPresets.file' => true]
]);
通过这种方式,我可以获取与预设相关的所有图像和文件,执行类似操作(此处没有任何问题):
问题是:
当我试图保存这些数据时,会出现各种各样的错误
我需要做的是:
- 将所有基本信息保存到
表中(名称、说明等)预设
- 在
表中为每个文件创建一条记录,将它们链接到刚刚创建的预设,同时保存其他信息(布尔列)文件\u预设
files
表中创建新记录,因为文件已经在数据库中,并且我有它们的ID。我只想将他们的ID与新预设关联
提前感谢您对我的帮助,Daniel。您可能想尝试的一件事是使用别名而不是类名:
$this->belongsToMany('OriginalImage', [
'through' => 'FilesPresets',
'className' => 'Files',
'property_name' => 'original_image',
'foreignKey' => 'preset_id',
'targetForeignKey' => 'file_id',
'conditions' => ['OriginalImage.original_image' => true] // <-- Changed `FilePresets` to `OriginalImage` alias.
]);
$this->belongstomy('OriginalImage')[
'通过'=>'文件预设',
'className'=>'Files',
'属性名称'=>'原始图像',
'foreignKey'=>'preset_id',
'targetForeignKey'=>'file_id',
'conditions'=>['OriginalImage.original\u image'=>true]//您已经对它进行了很好的解释,但最重要的是,实际错误和用于保存的代码都丢失了。嘿,丹尼尔,您找到了解决问题的方法吗?
$this->belongsToMany('OriginalImage', [
'through' => 'FilesPresets',
'className' => 'Files',
'property_name' => 'original_image',
'foreignKey' => 'preset_id',
'targetForeignKey' => 'file_id',
'conditions' => ['OriginalImage.original_image' => true] // <-- Changed `FilePresets` to `OriginalImage` alias.
]);