Tl; Dr:如何创建一个数组;从两张桌子;与hasMany和belongsTo关联;通过;与CakePHP;最佳。
编辑:来自(http://book.cakephp.org/view/872/Joining-tables)这就是我正在努力学习如何做,虽然它说“hasOne”而不是hasMany ....“在CakePHP中,一些关联(belongsTo和hasOne)执行自动连接以检索数据,因此您可以发出查询以根据相关数据中的数据检索模型。”
我正在尝试通过一个数组进行操作,该数组理想地包含来自两个具有hasMany和belongsTo关系的表的数据。我知道CakePHP内置了一些功能,使其非常简单并且想要使用它:
所以,我想创建一个包含两个表中数据的数组,这样我就可以在视图中轻松显示数据。请注意,没有关于加入包含查找参数的数组的信息。我认为CakePHP在创建关联时会加入表格;我只是不确定在创建数组时如何访问这些关联。
(我已经在这上面花了几个小时,但是在网上或书中找不到如何做的例子,谢谢你的帮助)。我可以解决这个问题(通过创建一个单独的数组并拥有一个更复杂的视图文件),但我只是开始学习编程,并希望在某种程度上做到最佳并使用CakePHP的功能。
提前感谢您的帮助!我不正确使用这些关联(belongsTo和hasMany)我不必在controller / find()中显式声明连接?我现在可能会尝试手动建立连接以查看会发生什么。
现有代码(这很好用):
trips_controllers:
function view() {
if(empty($this->data)){
$this->Session->setFlash('You forgot to put stuff in the form fields!');
$this->redirect(array('action'=>'index'));
}
$price=$this->data['Trip']['price'];
$origin=$this->data['Trip']['origin_airport'];
$this->set('trips', $this->Trip->find('all', array('conditions'=>array('Trip.price <='=>$price, 'Trip.origin_airport'=>$origin), 'limit'=>30, 'recursive=>2')));
视图:
<th>Trip ID</th>
<th>Price</th>
<th>Origin</th
</tr>
<? foreach($trips as $trip):?>
<tr>
<td><?=$trip['Trip']['trip_id'];?></td>
<td><?=$html->link($trip['Trip']['url']); ?>
<td><?=$trip['Trip']['origin_airport'];?></td>
<td><?=$trip['Trip']['price'];?></td>
</tr>
<? endforeach;?>
再次感谢!
答案 0 :(得分:1)
如果Trip有很多腿,你应该可以像这样遍历数据:
foreach ($trips as $trip) {
echo $trip['Trip']['id'];
…
foreach ($trip['Leg'] as $leg) {
echo $leg['id'];
…
}
}
debug($trips)
是你的朋友。默认的Cake数据数组布局非常合理。尝试习惯它,应该很少需要在99.99%的应用程序中修改结构。相反,在所有地方保持一致是有充分理由的。