Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在CakePHP 3中保存多个归属关联_Php_Mysql_Cakephp_Cakephp 3.0 - Fatal编程技术网

在CakePHP 3中保存多个归属关联

在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) 我正在创建的网站上有一个表单用于创建预设。 预设由以下部分组成:

首先让我解释一下我想要实现的目标。

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)
我正在创建的网站上有一个表单用于创建预设。
预设由以下部分组成:

  • 3个图像:一个原始图像、一个小拇指和一个大拇指,都存储在
    文件
    表中
  • 未知数量的文件,也存储在
    files
    表中
  • 预设
    表中存储的附加信息
所有文件都是事先通过AJAX上传的,因此当表单提交时,所有文件都已经在数据库中,它们的id通过隐藏输入和所有预设信息一起发送

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.
]);