【问题标题】:how to use cakePHP's containable when the key is $slug当 key 是 $slug 时如何使用 cakePHP 的可包含
【发布时间】:2014-02-03 15:32:56
【问题描述】:

我有一个包含许多照片的画廊模型,在我的画廊视图中,我通过 $slug 找到了画廊。我正在显示属于特定 gallery_id 的所有照片。这按预期工作。

但是,我想在查询中添加一个条件,仅当 photo.active => 'yes' 时才返回照片。

我发现,由于 $slug 找到了画廊视图,我过滤照片的尝试不起作用。在照片模型中,我保存了 gallery_id 而不是 gallery.slug。

我尝试在画廊控制器中使用可包含,但在使用此控制器查找时出现以下错误:

    $galleryphotos = $this->Gallery->Photo->find('all', array(
    'contain' => array('Photo'),
    'conditions' => array(
        'gallery.slug'=> $slug,
        'photo.active'=>'yes')));   

我在视图中遇到的错误:

Warning (512): Model "Photo" is not associated with model "Photo"

在照片模型中添加gallery.slug 列是查询有条件的照片的最佳方式吗?

另外,为什么在画廊控制器中使用可包含时会出现错误?

干杯,保罗

【问题讨论】:

    标签: cakephp containable


    【解决方案1】:

    您尝试将 Photo 模型添加到您正在查询的 Photo 模型中,因此请尝试:

    $galleryphotos = $this->Gallery->find('first', array(
        'contain' => array('Photo'),
        'conditions' => array(
            'Gallery.slug'=> $slug,
            'Photo.active'=>'yes')));  
    

    或者

    $galleryphotos = $this->Gallery->Photo->find('all', array(
        'contain' => array('Gallery'),
        'conditions' => array(
            'Gallery.slug'=> $slug,
            'Photo.active'=>'yes')));
    

    假设关联是Gallery hasMany Photo

    这应该在模型内部,而不是控制器内部,这样您就可以保持控制器精简,只需调用 $this->Gallery->view($slug); 即可获取数据。

    【讨论】:

    • 谢谢 Burzum,我使用了你的第二个建议,当我使用 debug($galleryphotos);但是,当我在视图中使用变量 $galleryphotos 时,我收到错误:注意 (8):未定义变量:galleryphotos。我还没有把它移到模型中,因为我想让它在控制器中工作。但是我会。我查看了我所做的事情,但不明白为什么会出现此错误。我错过了什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-03
    • 2014-06-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多