另一个“需要从cakephp中的两个表中提取数据”

时间:2011-12-12 22:09:40

标签: mysql cakephp cakephp-appmodel

好的,我有两个表,用户和单位。 “单位”属于“用户”,“用户”属于“单位”。我想从我的单位表中访问所有数据,并附加我的用户表中的一些数据用于视图。这是我的控制器代码:

public function condos() {
    $u=$this->User->Unit->find('all', array('conditions'=>array('type'=>'condo',     'active'=>1)));
    $this->set('allcondos', $u);
}

我有两个模型,User和Unit,这是他们的代码:   来自unit.php:

class Unit extends AppModel {
    var $name='Unit';
    var $belongsTo=array(
        'User'=>array(
        'className'=>'User',
        'foreignKey'=>'user_id'
    ) );
}

来自user.php:

class User extends AppModel {
    var $name='User';
    var $hasMany=array(
        'Unit'=>array(
        'className'=>'Unit',
        'foreignKey'=>'user_id'
    ) );
}

这是我的观看代码:

<?php foreach ($allcondos as $condo) { ?>

<section class="listings">
<figure>
<img src="<?php echo $condo['Unit']['photo1']; ?>" />
</figure>
<h1><?php echo $condo['Unit']['complex'], ' ', $condo['Unit']['unitnum']; ?></h1>
<h2><?php echo $condo['Unit']['city']; ?>, <?php echo $condo['Unit']['state']; ?> | (<?php echo $condo['User']['area_code']; ?>)<?php echo $condo['User']['exchange'];?>-<?php echo $condo['User']['sln'];?></h2>
<p><?php echo $condo['Unit']['unit_desc']; ?></p>
</section>
<?php } ?>

我对$ condo ['User'] ['any_field']的调用有问题,因为它返回零'用户'数据。 (它返回'单位'数据就好了)。我显然不知道如何访问这两个表。

如果我在视图中调试$ allcondos,它看起来像这样:

Array
(
    [0] => Array
    (
        [Unit] => Array
            (
                [id] => 1
                [user_id] => caribeincrentals
                [additional fields] ...
            )

        [User] => Array
            (
                [id] => 
                [user_id] => 
                [additional fields] ...
            )

    )
    [1] => Array ...
)

2 个答案:

答案 0 :(得分:1)

$this->Unit->find('all', array(
        'conditions' => array(
            'type' => 'condo',
            'active' => 1,
        ),
        'contain' => array(
            'User',
        ),
    ));

使用containsable获取相关数据。您也可以使用其中的条件来限制您想要的信息。

http://book.cakephp.org/view/1323/Containable

答案 1 :(得分:0)

如果没有您的数据库详细信息,很难确切地说出发生了什么。但是,您似乎使用字符串值作为将两个模型链接在一起的foreignKey。这是一个坏主意。

我建议将user_id fk更改为引用Users表上的id键列的int数据类型(假设id是一个自动递增的整数值)。

很难说这是否是确切的问题,但它绝对值得一试,并将帮助您避免将来出现其他一些问题。

<强>更新

如果根据Cake约定构建表,那么大部分关联工作都将为您完成。我就是这样做的:

用户表('用户'):

id        primary key (int)

用户模型:

$hasMany = array( 'Unit' );

单位表('单位'):

id        primary key (int)
user_id   corresponds to id in users table

单位型号:

$belongsTo = array( 'User' );

如果您设置表格&amp;像这样的模型,Cake会自动将units表中的'user_id'与users表中的'id'相关联。

相关问题