如何撰写CakePHP模型查询

时间:2013-08-02 22:52:59

标签: mysql cakephp cakephp-2.1

我的模型中存在以下情况:

-a "users" table, with "id" as primary key
-a "stores" table with "id" as primary key, and "users_id" as foreign key
-a "promos" table with "id" as primary key, and "stores_id" as foreign key

换句话说,每个促销只属于1个商店,每个商店只属于1个用户,关系在模型文件中设置。

我想创建一个操作/视图,允许登录用户只看到他自己的宣传片,但我不确定如何。

以下代码给我一条错误消息,因为“User.id”不是promos表的一部分,但是我不知道如何创建参数,这些参数只会将促销列表限制为此用户拥有的商店。 / p>

$allPromos = $this->Promo->find('all', array('conditions' => array('Store.id' => $storeId, 'Store.enabled' => 1, 'User.id' => $this->Session->read('id'))));

任何提示?

谢谢!

2 个答案:

答案 0 :(得分:0)

嗯,你的模型结构有点奇怪。现在看起来每个商店只属于一个用户,每个促销只属于一个商店。如果这是正确的,请确保您的模型关联正确。 您在这里找到了用户,因此User.php需要var $hasMany = array('Store')而Store.php需要var $hasMany = array('Promo')

$allPromos = $this->User->find('all', 
                               array('fields' => array('Promo.*'),
                                     'contain' => array('Store', 'Promo'),
                                     'recursive' => 2 //Two levels of recursion to get from User to Store to Promo
                                     'conditions' => 
                                     array('Store.id' => $storeId, 
                                           'Store.enabled' => 1, 
                                           'User.id' => $this->Session->read('id'))));

答案 1 :(得分:0)

在PromosController中:

$this->Promo->find('all', array(
                          'conditions'=>array(
                             'Store.user_id'=>$this->Session->read('id'),
                             'Store.enabled'=>1),
                          'contain'=>array('Store'));

在UsersController中获取有关用户,他的商店和促销的信息:

$this->User->find('first', array('conditions'=>array(
    'User.id' => $this->Session->read('id'),
    'Store.enabled' => 1),
  'contain'=>array('Store'=>'Promo')
));