I am using (or trying to) the upload plugin from Jose Gonzalez: https://github.com/josegonzalez/upload, and I want to store my image records in a separate table. I followed the readme on github, but it does not point out how to enable this feature in the add/edit views and the controller. Here is what I did so far:
app/Model/Image.php:
class Image extends AppModel {
public $actsAs = array(
'Upload.Upload' => array(
'image' => array(
'thumbnailSizes' => array('thumb' => '20x20')
),
),
);
public $belongsTo = array(
'Profession' => array(
'className' => 'Profession',
'foreignKey' => 'foreign_key'
)
);
}
app/Model/Profession.php:
class Profession extends AppModel {
public $hasMany = array(
'Image' => array(
'className' => 'Image',
'foreignKey' => 'foreign_key',
'conditions' => array(
'Image.model' => 'Profession'
)
)
);
}
app/View/Professions/add.php (the relevant part):
$this->Form->input('Image.image', array('type' => 'file', 'label' => ''));
app/Controller/ProfessionsController.php:
public function add() {
if ($this->request->is('post')) {
if ($this->Profession->saveAll($this->request->data)) {
$this->redirect(array('action' => 'index'));
} else {
$this->Session->setFlash(__('Error'));
}
}
}
the file is not being uploaded, and the record in my images table is as follows:
id | model | foreign_key | name | image | dir | type | size | active
---+-------+-------------+----------+-------+------+-----------+------+--------
1 | | 1 | test.png | | NULL | image/png | 814 | 1
model, image and dir should not be empty/null.
the debug output debug($this->request->data) from the add()-function is:
array(
'Profession' => array(
[...]
),
'Image' => array(
'image' => array(
'name' => 'test.png',
'type' => 'image/png',
'tmp_name' => '/Applications/MAMP/tmp/php/phpTMHMF9',
'error' => (int) 0,
'size' => (int) 1473
)
)
)
The problem is, as I said above, that the upload is not working and that the image-record is incomplete.
I hope this is understandable, I really don’t want to store image information in the same table as the model.
Excuse me for the late answer, but I had the same problem and it took me a while (about 4 hours) to figure it out so here’s my solution for possible future reference.
In my case, the Upload (attachment) model class looks like this (app\Model\Upload.php)
My product looks like this (app\Model\Product.php)
My database scheme:
Now the 2 solution are in the add view of product (appView\Products\add.ctp)
You’ll need to manually add the model by adding a hidden field to your form and you’ll need to add the database field to the file field. In your case it would become: