Kohana 3.2 ORM 不包含模型信息
Posted
技术标签:
【中文标题】Kohana 3.2 ORM 不包含模型信息【英文标题】:Kohana 3.2 ORM Does not contain model info 【发布时间】:2011-11-17 01:45:29 【问题描述】:我正在使用 Kohana 3.2,并且在我的控制器中有以下代码。
$Blog_Post = new Model_Blogpost();
$Blog_Post->where('id', '=', 1);
$Blog_Post->find();
$content = $Blog_Post->content;
我的数据库中目前有 3 条记录,id 分别为 1、2 和 3。
$Blog_Post->content 或任何其他字段返回 null。我不知道为什么。
【问题讨论】:
【参考方案1】:如果您需要 PK == $id 的对象,请使用 ORM::factory('blogpost', $id)
或 new Model_Blogpost($id)
。
加载后检查您的模型。
if $Blog_Post->loaded() // it works! else // record not found
如果没有找到记录,您可以使用$Blog_Post->last_query()
查看最后一个数据库查询
UPD。来自 cmets。您的模型不适用于此修改。请注意,存储在 $_object
属性中的 ORM 数据和 $Blog_Post->content
只是 $Blog_Post->_object['content']
通过 __get()
方法的快捷方式。当然,如果你定义了 public $content
属性,$Blog_Post->content
将返回 NULL 值而不是使用 DB 数据。
没有理由将模型字段定义为属性。如果您需要 IDE 提示,只需使用 phpDOC。
【讨论】:
这很奇怪,我以前用过工厂,但也没有用。我还使用了“new Model_Blogpost($id)”并检查了该对象是否已加载,确实如此!!但是对于 $Blog_Post->content,我仍然返回 null。仔细查看该对象会发现 _object 确实包含模型信息 d.pr/fY99,但所有实际调用的字段都是空的。 您的模型中似乎有不正确的修改。你能把它粘贴到某个地方(例如pastebin.com)吗? 你是对的!问题在于我如何定义我的模型。问题是我在我的模型d.pr/Xp5B 中重新声明了每个表字段。当我测试/学习框架时,我一直在做不同的事情。我猜模型越简单越好吗?如果您编辑答案,我会将其标记为正确答案。感谢您的帮助! ORM 模型并不像你想象的那么简单;)答案已更新。【参考方案2】:在我工作的公司,我们最近正在考虑升级到 3.2。但是,在我们的评估中,我不记得看到 ORM 处理方法有什么不同。 你上面的看起来应该是这样的:
$Blog_Post = ORM::factory('blogpost')->where('id', '=', 1)->find();
$content = $Blog_Post->content;
当然,假设您的表称为 blogposts。我可能错了,如果我错了,你能链接到显示这种模型交互的文档吗?
【讨论】:
其实工厂返回的是一个新的Model,所以可以进行级联方法调用。据我所知,你的一行代码和我的三行代码是等价的。现在你确实提出了一个很好的观点。在谈论表的名称时。我的表称为 blog_post 而不是 blogpost。虽然我的模型中有一个变量“protected $_table_name = 'blog_post';”这应该告诉模型我正在使用什么表。我想我在同一个地方:(以上是关于Kohana 3.2 ORM 不包含模型信息的主要内容,如果未能解决你的问题,请参考以下文章
Kohana 3.2 - ORM 的 pk() 方法在 save() (create()) 之后返回 false - 为啥?