【发布时间】:2014-12-31 23:12:44
【问题描述】:
首先让我解释一下我想要实现的目标。
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)
我正在此网站上构建一个用于创建预设的表单。
Preset 由以下部分组成:
- 3张图片:一张original_image,一张small_thumb和一张big_thumb,都存储在
files表中 - 未知数量的文件,也存储在
files表中 -
presets表中存储的其他信息
所有文件都是预先通过 AJAX 上传的,所以当提交表单时,所有文件都已经在数据库中,并且它们的 ID 与所有预设信息一起通过隐藏输入发送。
files_presets 表是我用来将每个预设链接到其文件和图像的表。 original_image、small_thumb、big_thumb 和 file 列是布尔值,指示每个文件对预设的含义。
所以,这就是我在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]
]);
这样我可以获取与预设相关的所有图像和文件,执行类似的操作(这里没有任何问题):
$preset = $this->Presets->get($id, [
'contain' => [
'OriginalImage', 'SmallThumb', 'BigThumb', 'Files'
]
]);
问题是:
尝试保存此数据时出现各种错误。
我需要做什么:
- 将所有基本信息保存到
presets表(名称、描述等) - 在
files_presets表中为每个文件创建一条记录,将它们链接到刚刚创建的预设,同时保存其他信息(布尔列)
请记住,我不想在files 表中创建新记录,因为文件已经在数据库中并且我有它们的 ID。我只想将他们的 ID 与新预设相关联。
提前感谢您帮助我,
丹尼尔。
【问题讨论】:
-
你已经解释了这一切都很好,但最重要的是,实际的错误和用于保存的代码都不见了。
-
嗨,丹尼尔,您找到解决问题的方法了吗?
标签: php mysql cakephp cakephp-3.0