好的,我有两个表,用户和单位。 “单位”属于“用户”,“用户”属于“单位”。我想从我的单位表中访问所有数据,并附加我的用户表中的一些数据用于视图。这是我的控制器代码:
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 ...
)
答案 0 :(得分:1)
$this->Unit->find('all', array(
'conditions' => array(
'type' => 'condo',
'active' => 1,
),
'contain' => array(
'User',
),
));
使用containsable获取相关数据。您也可以使用其中的条件来限制您想要的信息。
答案 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'相关联。