0

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

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

我已经用别名$_has_many在模型上建立了关系Useruser_created

我知道我可以使用实际的字段userID,但我希望能够做这样的事情

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

这对于检查是否有类似这样的多对多也很方便

'm2m_relation_count', '>', 0

这可能吗?谢谢!

4

2 回答 2

0

您可以通过以下方式在 Kohana 中使用 ORM 执行此操作。

$user->user_created->find_all();

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

如果您想检查用户是否创建了帖子,您只需使用相同的函数并对count()结果执行 a 并检查它是否大于 0。

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

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

于 2012-12-19T10:39:05.800 回答
0

1)没有快速的方法可以让所有用户都没有帖子。我更喜欢添加特殊列post_count并在发布后增加它。

2)您可以检查用户与has()/has_any()方法的 m:m 关系:

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
}
于 2012-12-19T19:08:50.993 回答