Hi, I have a product.

The product can have one 'small' photo, and several 'big' photos

The product is associated to photo using one table, aliases and conditions.

I need a query to find all product with one 'small' photo and *at least* 
one 'big' photo

I've tried the following code without success

    $this->Product->recursive = -1;
    $conditions = array('Product.category_id'=> $cats);
    $joins = array(
        array('table' => 'photos',
            'alias' => 'PhotoBig',
            'type' => 'INNER',
            'conditions' => array(
                'Product.id = PhotoBig.product_id',
            )
        ),
        array('table' => 'photos',
            'alias' => 'PhotoSmall',
            'type' => 'INNER',
            'conditions' => array(
                'Product.id = PhotoSmall.product_id',
            )
        )
    );
    $this->paginate = array(
        'limit' => 12,
        'conditions' => $conditions,
        'joins' => $joins,
    );


    // app/models/product.php
    <?php
    class Product extends AppModel {
    var $name = 'Product';
    //The Associations below have been created with all possible keys, 
those that are not needed can be removed
    var $hasOne = array(
        'PhotoSmall' => array(
            'className' => 'Photo',
    'foreignKey' => 'product_id',
    'dependent' => true,
    'conditions' => 'PhotoSmall.tipo = "small"',
        ));
        var $hasMany = array(
    'PhotoBig' => array(
    'className' => 'Photo',
    'foreignKey' => 'product_id',
    'dependent' => true,
    'conditions' => 'PhotoBig.tipo = "big"',
    'order' => 'PhotoBig.order',
    ));
    }


    <?php
    // app/models/photo.php
    class Photo extends AppModel {
        var $name = 'Photo';
        var $actsAs = array(
            'FileUpload.FileUpload' => array(
                'uploadDir' => 'files/products',
            ),
        );
        var $belongsTo = array('Product');
        
        
        function beforeSave($options = array()) {
            if(!empty($this->data)) {
                if($this->alias == 'PhotoBig') {
                    $this->data[$this->alias]['type'] = 'big';
                }
                else {
                    $this->data[$this->alias]['type'] = 'small';
                }
            }
            return true;
        }
    }


If there's a better schema (or way) to do this I'll be glad to hear you.

Thanks

-- 
Our newest site for the community: CakePHP Video Tutorials 
http://tv.cakephp.org 
Check out the new CakePHP Questions site http://ask.cakephp.org and help others 
with their CakePHP related questions.


To unsubscribe from this group, send email to
[email protected] For more options, visit this group at 
http://groups.google.com/group/cake-php

Reply via email to