CakePHP bindModel 工作,预设模型关联不
Posted
技术标签:
【中文标题】CakePHP bindModel 工作,预设模型关联不【英文标题】:CakePHP bindModel working, preset Model associations not 【发布时间】:2011-01-29 04:48:56 【问题描述】:我正在开发一个个人项目。
我有两个模型“Show”和“Episode”。我有一个控制器“Ops”。
显示模型:
class Show extends AppModel
var $name = 'Show';
var $hasMany = array(
'Episode' => array(
'className' => 'Episode',
'foreignKey' => 'show_id'
)
);
剧集模型:
class Episode extends AppModel
var $name = 'Episode';
var $belongsTo = array(
'Show' => array(
'className' => 'Show',
'foreignKey' => 'show_id'
)
);
运维控制器:
class OpsController extends AppController
var $name = 'Ops';
var $uses = array('Show','Episode');
function index()
$episodes = $this->Episode->find('all',array(
'limit' => 10,
'order' => array('Episode.first_aired' => 'DESC'),
)
);
debug($this->Episode);
debug($episodes);
运行 Ops 控制器时,我得到了我想要的“Episode”记录,但没有获得基于“belongsTo”配置中的“show_id”的关联“Show”记录。看来它根本没有引用模型,因为我可以故意破坏模型类而请求仍在继续。
经过大量检查、研究和测试后,我能够通过在 find() 请求之前将以下内容添加到 Ops 控制器中来使其工作:
$this->Episode = ClassRegistry::init('Episode');
$this->Episode->bindModel(
array('belongsTo' => array(
'Show' => array(
'className' => 'Show'
)
)
)
);
虽然这可行,但我仍然想知道为什么我的模型没有被正确调用。非常感激任何的帮助。谢谢!
【问题讨论】:
【参考方案1】:如果你以同样的方式查询Show会发生什么?
您确定id
字段的定义正确吗?
在两个表上都应该有id
(INTsize),在episodes上也应该有show_id
(INTsize)。
如果它是根据 Cake 约定设置的,您应该可以删除 'foreignKey' => 'show_id'
行,Cake 会自行整理。`
【讨论】:
是的,我已经仔细检查了字段类型并且设置正确。我也尝试过使用和不使用具有相同结果的“foreignKey”设置。我正在处理的主要问题是使用 $uses 变量时未包含模型类。我故意在我的模型中添加错误,而“使用”它们的控制器不会出错。【参考方案2】:听起来 Cake 没有使用您的模型文件,而是根据表格自动生成一些模型文件。 这听起来很愚蠢,但请检查文件夹和文件名是否有拼写错误以及它们是否为小写。
【讨论】:
【参考方案3】:在您的 Show 模型中,您将 Episode 外键设置为 show_id,它应该是 episode_id。但是,我不认为这是导致问题的原因。
据我所知,您没有更改任何 Cakephp 命名约定,因此只需删除定义关联的数组并保留为字符串,例如
class Show extends AppModel
var $name = 'Show';
var $hasMany = array(
'Episode'
);
class Episode extends AppModel
var $name = 'Episode';
var $belongsTo = array(
'Show'
);
这可能不起作用,但我之前遇到过类似的问题,这解决了它。祝你好运。
【讨论】:
以上是关于CakePHP bindModel 工作,预设模型关联不的主要内容,如果未能解决你的问题,请参考以下文章