Модель X не связана с Model Y cakephp - PullRequest
0 голосов
/ 01 февраля 2012

У меня есть изображение, которое принадлежит пользователю, и у меня есть купон, который принадлежит пользователю.Каждая таблица изображений и купонов имеет внешний ключ user_id в моей базе данных.Когда я отлаживаю выходные данные логики этого контроллера:

$f=$this->Coupon->find('all', array(

            'conditions'=>array(
                'OR'=> array (
                    'Coupon.expires' =>0,
                    'Coupon.end_date >'=>date('y-m-d')
                    )
                ),
            'contain'=>array(
                'Image',
                'Location'=>array('id','address','city','state','zip','area_code','exchange','sln','website'),
                'User'=>array('id')
                )
            )

       );
      $this->set('printcoupons', $f);
      }

, я получаю все свои данные, кроме массива изображений, который, по словам торта, не связан с купоном.Я попытался установить рекурсивность Coupon в 2, и я не получаю никаких изменений в том, что восстанавливается.Я попытался загрузить модель User и сделать поиск таким образом, что привело к катастрофическим результатам.Я просто не понимаю, как лучше заставить Image и Coupon играть вместе, учитывая, что я не хочу, чтобы они напрямую ассоциировались друг с другом.

1 Ответ

2 голосов
/ 01 февраля 2012

То, как у вас есть ваш массив «содержимого», подразумевает, что Image напрямую связан с купоном (между ними нет модели), что не так.Купон принадлежит Пользователю, а Пользователь имеет * Изображение.Таким образом, изображение должно быть в массиве пользователя.Все содержащиеся в нем модели могут использовать все или большинство доступных опций find ().при использовании содержимого рекурсивно имеет логическое значение.

http://book.cakephp.org/2.0/en/core-libraries/behaviors/containable.html#containablebehavior-options

Я думаю, вам действительно следует просто добавить это в свою модель приложений, поскольку вы в большинстве случаев всегда используете содержащий и контейнер должен быть присоединенко всем моделям, используемым в защитной оболочке

public $actsAs = array('Containable');

Таким образом, вам не нужно постоянно прикреплять поведение к каждой модели.

    $f = $this->Coupon->find('all',
        array(
            'conditions' => array(
                'OR' => array(
                    'Coupon.expires' => 0,
                    'Coupon.end_date >' => date('y-m-d')
                )
            ),
            'contain' => array(
                'Location' => array(
                    'fields' => array(
                        'id', 'address', 'city', 'state', 'zip', 'area_code',
                        'exchange', 'sln', 'website'
                    )
                ),
                'User' => array(
                    'fields' => array('id'),
                    'Image'
                )
            )
        )
    );
...