【问题标题】:How to save multiple images with a hasMany relationship in CakePHP?如何在 CakePHP 中使用 hasMany 关系保存多个图像?
【发布时间】:2016-01-08 06:23:03
【问题描述】:

如何在辅助表中保存多张图片?

我的第一个表是Car,其中包含以下字段:

  • 身份证
  • 标题
  • featured_image 和

我的辅助表是Gallery,其中包含以下字段:

  • 身份证
  • car_id
  • gallery_images

Model Car.php

class Car extends AppModel
{
    var $name='Car';
    var $hasOne = array(
        'Gallery' => array('className' => 'Gallery',
            'foreignKey' => 'car_id'
        ));
}

模型库.php

class Gallery extends AppModel
{
    var $name='Gallery';
    var $belongsTo = array(
        'Car' => array('className' => 'Car',
            'foreignKey' => 'car_id',

        )
    );
}

CarController.php

$this->Car->saveAll($this->data)

【问题讨论】:

  • 请说明gallery_images 字段是什么以及它包含什么数据类型。您打算将图像的文件名存储在哪里?
  • gallery_images 是画廊表的字段名称,其中包含图像名称和数据类型是 varchar 和我的计划

标签: cakephp orm cakephp-2.x


【解决方案1】:

要保存与汽车关联的多个图像,首先您必须将汽车模型修改为:

class Car extends AppModel
{
    var $hasMany = array(
        'Gallery' => array(
            'className' => 'Gallery',
            'foreignKey' => 'car_id'
        ));
}

或者只是

class Car extends AppModel
{
    var $hasMany = array('Gallery'); //simplified version, as fields follow convention
}

然后您必须按如下方式构建数据:

$data = array(
    'Car' => array('title' => 'Volvo'),
    'Gallery' => array(
        array('gallery_images' => '/path/image1'),
        array('gallery_images' => '/path/image1'),
        array('gallery_images' => '/path/image3'),
    ),
);

在您看来,表单应具有以下结构:

echo $this->Form->create('Car', array('action' => 'add'));
echo $this->Form->input('Car.title');
echo $this->Form->input('Gallery.0.gallery_images');
echo $this->Form->input('Gallery.1.gallery_images');
echo $this->Form->input('Gallery.2.gallery_images');
echo $this->Form->end();

在您的CarControllers::add() 中,您可以保存所有四条记录(一辆汽车和三张图片):

$this->Car->saveAll($this->request->data);

请考虑重命名您的字段以更好地表示您的数据。例如,gallery_images 应重命名为 image_filename 之类的名称,Gallery 应重命名为 ImagePhoto

根据Car.featured_image,它可以为画廊保存一个外键,或者您可以将此字段移动到画廊/图像表并使其成为一个名为type的字段(保存“特色、普通等”) ,或者可能是一个名为 is_featured 的布尔值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多