2016-01-08 3 views
0

Как сохранить несколько изображений во вторичной таблице?Как сохранить несколько изображений с помощью отношений hasMany в CakePHP?

Моя первая таблица Car, которая имеет поля:

  • идентификатор
  • название
  • featured_image и

Моя вторичная таблица Gallery, которая имеет поля:

  • ID
  • car_id
  • gallery_images

модель-Car.php

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

Модель Gallery.php

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

     ) 
    ); 
} 

автомобилей Controller.php

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

Просьба уточнить, что такое поле 'gallery_images' и какой тип данных он содержит. Где вы планируете хранить имена файлов для изображений? –

+0

gallery_images - это имя поля таблицы галереи, в котором хранятся имя изображения и тип данных - varchar и мой план – jay

ответ

0

Чтобы сохранить несколько изображений, связанных с автомобилем, сначала вы должны изменить вашу модель автомобиля в:

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 - Image из Photo.

Согласно Car.featured_image, он может содержать внешний ключ для галерей, или вы можете переместить это поле на стол галереи/изображения и сделать его поле с именем type (холдинг «показал, нормальный, и т.д.»), или, возможно, boolean по имени is_featured.

Смежные вопросы