我有一个名为items
的表和一个名为item_pics
的表。
item_pics
有一个item_id
,file_name
和一个rank
字段(以及其他字段)。
我正在寻找的内容是针对item
个index
页面的$items
数组,以包含来自{{1}的file_name
将item_pics
的{{1}}与最低item
匹配。所以我可以在我的item_id
中访问(或某些之类的):
rank
我是CakePHP的新手,这是我的第一个项目。我认为Items/index.ctp
模型中的这个会导致 foreach ($items as $item):
$img = $item['Item']['ItemPic']['file_name'];
...
数据被提取(尽管我认为每个Item
的所有相关item_pics
都会被拉出而不仅仅是最低item_pics
):
item
但是我可以看到没有加载rank
数据(位于public $hasMany = array(
'ItemPic' => array(
'className' => 'ItemPic',
'foreignKey' => 'item_id',
'dependent' => false
)
}
的底部):
item_pics
另外,虽然我希望在items/index
页面中加入SELECT `Item`.`id`, `Item`.`title`, `Item`.`description`, `Item`.`created`, `Item`.`modified`, `Item`.`type`, `Project`.`id`, `Project`.`item_id`, `Project`.`title`, `Project`.`description`, `Project`.`rank`, `Project`.`created`, `Project`.`modified`
FROM `laurensabc`.`items` AS `Item`
LEFT JOIN `laurensabc`.`projects`
AS `Project`
ON (`Project`.`item_id` = `Item`.`id`)
WHERE `Item`.`type` IN (1, 2)
LIMIT 20
,但我并不真正需要projects
页面。
我已经做了一些搜索,但却无法找到我正在寻找的内容。我想我可以在view
视图项循环中进行查询,但我正在努力确保以正确的方式做事...... CakePHP方式。我想我需要改变一些关于模特关系的事情,但我没有运气。
CakePHP - Associations - HasMany,这看起来好像我可以按排名和限制排序1.但是这不起作用......即使它确实如此,我也不希望这会影响{{1页面,而只是index
页面。
我的控制器看起来像这样:
index
我也在我的控制器上试过这个,但它似乎也没有做任何事情:
view
答案 0 :(得分:1)
首先,在AppModel中设置containable
行为(或者如果您不希望在每个模型上使用它,请将其放在Item
模型上):
public $actsAs = array('Containable');
然后,在您的查询查询:
$items = $this->Item->find('all', array(
'contain' => array(
'ItemPic' => array(
'fields' => array('file_name'),
'order' => 'rank',
'limit' => 1
)
)
));
然后你可以像以下那样访问结果数组:
foreach ($items as $item):
$img = $item['ItemPic']['file_name'];
修改然后你应该把它放在分页查询上:
$this->paginate = array(
'conditions' => $conditions,
'contain' => array(
'ItemPic' => array(
'fields' => array('file_name'),
'order' => 'rank',
'limit' => 1
)
)
);
答案 1 :(得分:0)
在这种情况下,我可能按照你所说的排名和限制1进行排序,并将其作为索引页面的动态关联(参见http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html#creating-and-destroying-associations-on-the-fly)。所以使用$this->Item->bindModel(array('hasMany' => array('ItemPic' => $options)));
(我认为应该替换HasMany ItemPic的当前设置,但您可能必须先取消绑定模型)
通过bindModel创建的关联将仅用于下一个查询,然后它将恢复为您的正常设置,除非您专门设置选项以继续使用新关联。
至于为什么它没有让ItemPics带有Items,或者为什么尝试按等级和限制1排序对你不起作用,我不能说没有看到你的更多代码。