2012-12-19 152 views
0

我已经设置Kohana模型的关系定义(1:*和使用through)但想知道在WHERE语句中使用它们的最佳方式。Kohana 3.3:WHERE语句与关系

实施例:我有一个User模型和Post模型。 Post有一个外键(userID)到User

我已经安装在User模型别名user_created

我知道我可以用实际的现场userID一个$_has_many关系,但我希望能够做到像这样

$user->where('user_created', 'IS', NULL); 

这也将方便检查是否多到许多像这样的东西

'm2m_relation_count', '>', 0 

这可能吗?谢谢!

回答

0

您可以通过以下方式中的Kohana的ORM做到这一点。

$user->user_created->find_all(); 

这将导致用户创建的所有帖子。

如果要检查用户已经创建的帖子你只需要使用相同的功能,对结果做一个count()并检查它是否大于0

我不认为你可以使用别名在where子句本身。你必须从ORM对象中调用它。

许多一对多关系的工作方式相同。

0

1)没有快速的方法来获取所有用户,而不帖子。编号倾向于添加特殊列post_count并在发布后增加它。

2)可以检查用户对于m:米关系与has()/has_any()方法:

if ($user->has('roles')) { 
    // user has at least one role 
} 

if ($user->has('roles', $roleId) { 
    // user has role with id=$roleId 
} 

if ($user->has('roles', array($roleId1, $roleId2))) { 
    // user has both $roleId and $roleId2 roles 
} 

if ($user->has_any('roles', array($roleId1, $roleId2))) { 
    // user has on of the $roleId1 or $roleId2 
}