在CakePHP中,联接的确切方式

时间:2012-11-23 14:12:23

标签: php cakephp

我希望在控制器中有第二个包含数据的表,以便在视图中使用它。 此时我有一个名为'PortfoliosController.php'的控制器。在这个控制器中我有一个名为Index的公共函数,在这里我想加入它。

到目前为止,我有以下代码(只是我仍然无法访问连接表中的数据):

public function index() {
    $this->Portfolio->recursive = -1;

    $options = $this->Portfolio->find('all', array('joins' => array(
        array(
            'table' => 'students',
            'alias' => 'Student',
            'type' => 'LEFT',
            'foreignKey' => true,
            'conditions'=> array('Student.userid = Portfolio.userid')
        )
    )));

    $this->set('portfolios', $this->Portfolio->find('all', $options));
}

有人在这里看到问题,或者有一个可能有帮助的答案!?

2 个答案:

答案 0 :(得分:1)

从表格中获取数据的最佳方法是在投资组合模型中的两个表之间建立关系。

所以在这种情况下,它听起来像是会使用很多关系,因为投资组合可能包含来自第二个表的许多结果?这意味着,当您执行“全部”查找时,不仅会查找该表中的所有数据,还会查找第二个表中由于其关系而产生的数据。

有关在此设置关系http://book.cakephp.org/1.3/view/1040/Relationship-Types

的详细信息

答案 1 :(得分:0)

你的模特

阵列(             'className'=> 'State_master',             'foreignKey'=>假,             '类型'=> '左',             'conditions'=> array('State_master.state_id = Student_master.student_state'),             'dependent'=>真正         )         'City_master'=>数组(             'className'=> 'City_master',             'foreignKey'=>假,             '类型'=> '左',             'conditions'=>数组('City_master.city_id = Student_master.student_city'),             'dependent'=>真正         )         'class_master'=>数组(             'className'=> 'Class_master',             'foreignKey'=>假,             '类型'=> '左',             'conditions'=> array('Class_master.class_id = Student_master.student_class'),             'dependent'=>真正         )     ); } ?>

控制器:

$ this-> paginate = array('limit'=> 25,'order'=> array('admin_id'=>'asc'),                            '条件'=>阵列( 'school_admin_id'=> $这 - >会话而>读取( 'Auth.User.school_admin_id')));

                $stlist = $this->paginate('Student_master');
                $this->set('stlist',$stlist);

                $this->set('students_data',$stlist);

视图:

<tr>
    <th><input type="checkbox" name="checkall" id="checkall" onclick='checkedAll();'></th>
    <th>Name</th>
    <th>Email ID</th>
    <th>Contact No</th>
    <th>Class</th>
    <th>Status</th>
    <th>Option</th>
</tr>

<?php
    $rowcount=0;
    foreach ($students_data as $st_data) {
    $student_status=$st_data['Student_master']['student_status'];
  $student_id=$st_data['Student_master']['student_id'];
    $rowcount++;

    if($rowcount%2==0){
        $class='evenrow';
    }else{
        $class='oddrow';
    }

?>

<tr class='<?php echo $class;?>'>
<td>

<?php echo $this->Form->input("checkbox_std.", array("type" => "checkbox","value"=>$student_id));?>
</td>
    <td><?php echo $st_data['Student_master']['student_name'];?></td>
    <td><?php echo $st_data['Student_master']['student_email'];?></td>
    <td><?php echo $st_data['Student_master']['student_contact'];?></td>
    <td><?php echo $st_data['Class_master']['class_name'];?></td>


    <td>
        <?php 

            if($student_status==0){

        ?>
        <input type='button' value='Activate'>
        <?php }else{ ?>
        <input type='button' value='De-Activate'>
        <?php } ?>

    </td>
    <td>
        <input type='button' value='Edit'>
    <input type='button' value='View'>
    <input type='button' value='Delete'>

    </td>

</tr>