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 验证和表单验证

Kohana 3.2 - ORM 的 pk() 方法在 save() (create()) 之后返回 false - 为啥?

Kohana 2 ORM 自定义主键生成错误

Kohana ORM,在模型中定义字段

Kohana - 检查模型是不是存在(不是记录)

Kohana 3 ORM 模型中的 ORWHERE 等价物