繁体   English   中英

联接表CakePHP属于,hasMany

[英]Joining tables CakePHP belongsTo, hasMany

Tl; Dr:如何创建一个数组; 从两个表; 与hasMany和belongsTo关联; 通过 与CakePHP; 最佳。

编辑:From(http://book.cakephp.org/view/872/Joining-tables)这是我正在尝试学习的方法,尽管它说“ hasOne”而不是hasMany。

“在CakePHP中,某些关联(belongsTo和hasOne)执行自动联接以检索数据,因此您可以发出查询以基于相关联的数据检索模型。”

我试图遍历一个数组,该数组将理想地包含来自具有hasMany和belongsTo关系的两个表中的数据。 我知道CakePHP具有内置的功能,可以使其变得非常简单,并希望使用它:

  1. 旅行有很多腿
  2. 腿属于旅行

因此,我想创建一个包含两个表中数据的数组,以便可以在视图中轻松显示数据。 注意,没有任何关于加入包含find参数的数组的操作。 我认为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;?>

再次感谢!

如果Trip有很多分支,您应该可以像这样遍历数据:

foreach ($trips as $trip) {
    echo $trip['Trip']['id'];
    …
    foreach ($trip['Leg'] as $leg) {
        echo $leg['id'];
        …
    }
}

debug($trips)是您的朋友。 默认的Cake数据数组布局非常明智。 尝试适应它,在99.99%的应用程序中几乎不需要修改结构。 相反,有很强的理由要使其在所有地方保持一致。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM