代码之家  ›  专栏  ›  技术社区  ›  JohnAllen

连接表CakePHP belongsTo,hasMany

  •  0
  • JohnAllen  · 技术社区  · 15 年前

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

    编辑:从(http://book.cakephp.org/view/872/Joining-tables)这是我试图学习如何做的,虽然它说“hasOne”而不是hasmony。。。。

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

    我试图通过一个数组foreach,该数组理想地包含两个具有hasMany和belongsTo关系的表中的数据。我知道CakePHP有内置的功能,可以使这个过程非常简单,我想使用它:

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

    所以,我想创建一个包含两个表中数据的数组,这样我就可以轻松地在视图中显示数据。请注意,在包含find参数的数组中没有关于联接的内容。我认为CakePHP在创建关联时会连接表;我只是不确定在创建数组时如何访问这些关联。

    (我已经花了好几个小时在这上面了,但是在网上或者书本上找不到这样做的例子,所以谢谢你的帮助)。我可以绕过这一点(通过创建一个单独的数组和一个复杂得多的视图文件),但我刚刚开始学习编程,并希望以某种最佳方式完成它,并使用CakePHP的功能。

    提前谢谢你的帮助!对于这些关联(belongsTo和hasMany),我不必在controller/find()中显式声明连接,这难道不对吗?现在,我可能会尝试手动创建连接,看看会发生什么。

    现有代码(这很好):

    跳闸控制器:

    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;?>
    

    再次感谢!

    1 回复  |  直到 15 年前
        1
  •  1
  •   deceze    15 年前

    如果Trip有许多分支,那么您应该能够像这样循环遍历数据:

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

    debug($trips) 是你的朋友。默认的Cake数据数组布局非常合理。要想习惯它,在99.99%的应用程序中应该很少需要修改结构。相反,我们有充分的理由让它在任何地方都保持一致。