CakePHP 查找相关模型数据
Posted
技术标签:
【中文标题】CakePHP 查找相关模型数据【英文标题】:CakePHP find related model data 【发布时间】:2011-06-14 11:26:09 【问题描述】:我有用户和公司类:
class Firm extends AppModel
var $name = 'Firm';
var $belongsTo = 'User';
和:
class User extends AppModel
var $name = 'User';
var $hasMany ='Post';
var $hasAndBelongsToMany = 'Firm';
一切正常,但如果用户 id = 例如 5,我该如何搜索公司? 我用过:
$this->set('firms',$this->Firm->User->find('all', array('conditions'=>array('User.id'=>'5'))));
我认为:
<table>
<tr>
<th>Firma</th>
</tr>
<?php foreach($firms as $firm): ?>
<tr>
<td><?php echo $firm ['Firm']['firm_id']; ?></td> //line 9
</tr>
<?php endforeach; ?>
</table>
但是当我进入我的视图时,我得到了错误:
"Notice (8): Undefined index: firm_id [APP\views\firms\wylistuj.ctp, line 9]"
【问题讨论】:
你能显示在你看来? 【参考方案1】:
'firm_id' 将在您的联接表中,而不是您的公司模型中。
如果你想显示当前公司的 id,你应该只需要这个
<td> <?php echo $firm['Firm']['id']; ?> </td>
【讨论】:
还是不行。它说:未定义的索引:id [APP\views\firms\wylistuj.ctp,第 9 行]。 我得到了这样的调试 SQL 命令:SELECTUser
.id
, User
.username
, User
.password
, [..] FROM users
AS User
WHERE User
.id
= 5 选择 Firm
.id
, Firm
.login
, Firm
.password
, [..], @987665334 ,FirmsUser
987654341 @ firms
AS Firm
AS firms_users
AS FirmsUser
ON(user_id
987654347 @ = 5和FirmsUser
987654350 Firm
987654350 Firm
987654350 @) WHERE 1 = 1【参考方案2】:
你需要这样搜索:
$this->set('firms',$this->Firm->find('all',array('conditions'=>array('Firm.user_id'=>'5'))));
这应该会给你想要的结果。
编辑:
如果您想将您的模型与“拥有并属于多个”关系相关联,您需要像这样编写您的 2 个模型:
//user.php
class User extends AppModel
var $name = 'User';
var $hasAndBelongsToMany = 'Firm';
//firm.php
class Firmextends AppModel
var $name = 'Firm';
var $hasAndBelongsToMany = 'User';
要了解如何与协会合作,请阅读HABTM (has and belongs to many) relationships 的手册部分。
【讨论】:
仍然不起作用:1054:'where 子句'中的未知列'Firm.user_id' 你有这样的专栏吗?为此,您还需要在表中为公司提供一列user_id
。
那么你的联想是错误的。有关如何设置“拥有并属于许多”关联的信息,请参阅我的编辑。
您也可以尝试删除您的APP/tmp/cache/
文件(保留其中的文件夹完整,但删除内容)。如果您对模型进行了更改,蛋糕仍然可以使用缓存的。
正确,但如果他正在开发,他应该始终在他的 core.php 中使用Configure::write('debug', 2);
。这会禁用模型缓存,他会得到所有可能的错误。以上是关于CakePHP 查找相关模型数据的主要内容,如果未能解决你的问题,请参考以下文章
CakePHP - 在模型中查找没有 hasMany 关系的 hasMany 关联?