与条件有很多关系

时间:2015-04-11 13:40:08

标签: cakephp has-many belongs-to

主题可能是一个常见问题,但我有一个更深层次的问题。我是CakePhp的新生,已经在谷歌上搜索了这个问题。不幸的是我无法找到我的确切解决方案。

我的数据库结构如下,有两个表,我使用cakePhp命名约定:

- news (id, news_title, news_text, is_active, created, modified)

- news_images (id, news_id, image_src, is_default, created, modified)
  

每条新闻都有很多图片。但是一个图像被选为默认图像   在主页中用作缩略图。

在新闻列表页面中,我想列出所有带缩略图的新闻。 缩略图表示,news_images.is_default = true

所以我必须建立一个hasMany关系,但是使用is_default = true进行过滤

如果我在不使用任何条件的情况下简单地在hasMany和belongsTo关系之后获取数据,那么它将检索所有图像。我不能成功bingModal或容器,而我太新了cakePhp。

我想请求你的帮助。 提前谢谢。

3 个答案:

答案 0 :(得分:2)

有两种主要方法可以达到你想要的效果。

A:查找包含条件

$data = $this->News->find('all', array(
    'contain' => array(
        'NewsImage' => array(
            'conditions' => array(
                'is_default' => true
            )
        )
    )
));

B:在条件

的新闻模型中添加第二个关联

如果您要在多个地方执行此查找调用,这是更好的方法。

在模型新闻(news.php)中:

public $hasMany = array(
    'Image' => array(
        'className' => 'Image',
        'foreignKey' => 'news_id',
        'dependent' => false,
    ),
    'NewsThumbnail' => array(
        'className' => 'NewsImage',
        'foreignKey' => 'news_id',
        'conditions' => array('is_default' => true),
        'dependent' => false,
    )
);

现在您可以找到包含NewsThumbnail的新闻,并且会自动应用这些条件。

$data = $this->News->find('all', array(
    'contain' => array(
        'NewsThumbnail'
    )
));

注意:如果您在此处包含其他条件,它们将覆盖模型关联中设置的条件,因此您必须再次包含它们。

答案 1 :(得分:0)

数据库:
enter image description here
(在表images中,news_id是外键)

型号新闻news.php):

public $hasMany = array(
    'Image' => array(
        'className' => 'Image',
        'foreignKey' => 'news_id',
        'dependent' => false,
    )
);


模型图片image.php):

public $belongsTo = array(
    'News' => array(
        'className' => 'News',
        'foreignKey' => 'news_id',
    )
);

答案 2 :(得分:0)

谢谢你。我正在使用你的完美提示在CakePhp中提升自己。试图结合提示。

1)通过@DoNhuVy的提议重新构建数据库:
新闻: id,title ..,news_image_id
news_images: id,src ..,news_id

2)然后使用下面的模型@ corie-slate

class News extends AppModel {
 public $hasMany = array(
  'Image' => array(
   'className' => 'Image',
   'foreignKey' => 'entry_id',
   'dependent' => false),
  'NewsThumbnail' => array(
   'className' => 'NewsImage',
   'foreignKey' => 'entry_id',
   'dependent' => false));
}

直到这里,一切正常吗?