I think your solution is very good, but it does not suit my needs as
the system I am building is rather complex.

Instead I am going to use the following solution to store all my
images:

Images table:
id
foreign_id   //user_id
associated_model //User...    -- Image->belongsTo = User/Shop/Album/
Profile/More....
upload_comment // belongsTo $this->AssociatedModel->name
filename
full_path //stored in files.image.associated_model.filename
has_thumb
thumbs = serialized array  //small / large / medium / xlarge
ext
created
updated

-----------------

Then albums will have the following association:

--Profile
var $hasMany = array(
        'Image' => array(
                'className' => 'Image',
                'foreignKey' => 'foreign_id', //profile_id
                'conditions' => array( 'Image.associated_model' => 'Profile'),
        )
);

--Shop
var $hasMany = array(
        'Image' => array(
                'className' => 'Image',
                'foreignKey' => 'foreign_id', //shop_id
                'conditions' => array( 'Image.associated_model' => 'Shop'),
        )
);

--Product
var $hasAndBelongsToMany = array(
        'Image' => array(
                        'className'                             => 'Image',
                        'joinTable'                     => 
'shop_images_products',
                        'foreignKey'                    => 'product_id',
                        'associationForeignKey'         => 'image_foreign_id',
                        'fields'                                        => '',
                        'conditions' => array( 'Image.associated_model' => 
'Shop'),
                        'unique'                        => true,
        )
);

Thats the solution I will be using, hope it works.

I might even write a tutorial about this later....

Thank you all once again for helping out.


On Nov 8, 8:21 am, Adam Royle <[EMAIL PROTECTED]> wrote:
> Well, not really, you just need one images table for that.
>
> Then in your models you just have an image_id, and set your
> associations up like this:
>
> class Shop extends AppModel {
>
>         var $belongsTo = array(
>                 'Image' => array('className' => 'Image', 'foreignKey' => 
> 'image_id')
>         );
>
> }
>
> class Album extends AppModel {
>
>         var $belongsTo = array(
>                 'Image' => array('className' => 'Image', 'foreignKey' => 
> 'image_id')
>         );
>
> }
>
> If you need more than one image associated, then just use a habtm
> association and create a join table!
>
> I've been using this method for over a year and a half and I've never
> thought about doing it any other way.
>
> Cheers,
> Adam
>
> On Nov 8, 9:29 am, Marcus Silva <[EMAIL PROTECTED]> wrote:
>
> > That does help Adam.  Thats exactly the way I will do it now.
>
> > But I think I will end up with many tables which is what really puts
> > me off.  But thats not a problem.
>
> > Should have ShopImage, AlbumImage ProfileImage and so on...
>
> > Many thanks to all for helping out.
>
> > Cheers
>
> > On Nov 7, 10:42 pm, Adam Royle <[EMAIL PROTECTED]> wrote:
>
> > > The way I do this:
>
> > > Tables:
> > > - images
> > > - videos
> > > - documents
>
> > > Each of the tables has the standard fields like mime_type, filesize,
> > > path, etc. And each custom type has any extra fields that may be
> > > necessary (width, height, duration, bitrate, etc).
>
> > > Behaviors:
> > > - FileBehavior
> > > - ImageBehavior extends FileBehavior
> > > - VideoBehavior extends FileBehavior
>
> > > The reason I split into multiple tables is for associations. Often I
> > > want to control what media types are associated with my models. Eg. I
> > > might want a model to have many images but just one video. Plus, this
> > > prevents you from having to constantly check the media type if you're
> > > iterating through one array with multiple media types.
>
> > > Hope that helps.
>
> > > Cheers,
> > > Adam
>
> > > On Nov 8, 3:06 am, Marcus Silva <[EMAIL PROTECTED]> wrote:
>
> > > > Hi folks,
>
> > > > I am trying to create system which will let users upload media to the
> > > > server,  the question that I ask is weather using a single table to
> > > > store the uploaded files is better than using separate tables to store
> > > > each file type in terms of coding.
>
> > > > Seems to me that if I use the multiple table I will be creating
> > > > exactly the same data, but in a different table.
>
> > > > Example:  audios,videos,images etc....
>
> > > > My table structure:
>
> > > > CREATE TABLE `uploaded_files` (
> > > >   `id` int(11) unsigned NOT NULL auto_increment,
> > > >   `foreign_id` int(10) unsigned NOT NULL,
> > > >   `model` varchar(255) NOT NULL COMMENT 'Associated model name',
> > > >   `media` varchar(55) NOT NULL,
> > > >   `filename` varchar(255) default NULL,
> > > >   `ext` varchar(10) default NULL,
> > > >   `mime` varchar(55) default NULL,
> > > >   `filesize` int(11) NOT NULL,
> > > >   `webpath` varchar(255) NOT NULL COMMENT 'Web path to show file',
> > > >   `full_path` text NOT NULL COMMENT 'Full path to file_src',
> > > >   `hasThumb` tinyint(1) unsigned NOT NULL,
> > > >   `thumbs` text,
> > > >   `width` int(11) default NULL,
> > > >   `height` int(11) default NULL,
> > > >   `description` varchar(155) default NULL,
> > > >   `created` datetime default NULL,
> > > >   `updated` datetime default NULL,
> > > >   PRIMARY KEY  (`id`)
> > > > ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
>
> > > > Basically, I am looking for an easy solution that will reduce the
> > > > amount of code I write....
>
> > image> > Hope some of you guys can help.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"CakePHP" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/cake-php?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to