主题可能是一个常见问题,但我有一个更深层次的问题。我是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。
我想请求你的帮助。 提前谢谢。
答案 0 :(得分:2)
有两种主要方法可以达到你想要的效果。
$data = $this->News->find('all', array(
'contain' => array(
'NewsImage' => array(
'conditions' => array(
'is_default' => true
)
)
)
));
如果您要在多个地方执行此查找调用,这是更好的方法。
在模型新闻(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)
数据库:
(在表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));
}
直到这里,一切正常吗?