0

我有两个模型,它们具有以下关系:

class Model_User extends ORM
{
    protected $_has_many = array(
        'images' => array('model' => 'User_Image')
    );
}

class Model_User_Image extends ORM
{
    protected $_belongs_to = array(
        'usedvehicle' => array(),
    );
}

限制用户图像数量的最佳方法是什么?我正在考虑通过const MAX = 3在 Model_User_Image 类中声明来设置限制,然后使用这个值来检查当前的images. 有没有办法通过关系或规则来限制它?

4

1 回答 1

1

这个问题实际上可以使用 Kohana 的rules-system 来解决,如下所示:

Model_User_Image1 向您添加一个影响父 ID 的验证规则。您可以使用Model_User指定的方法max_no_images

public function rules()
{
    return array(
        'user_id' => array(
            array( array('Model_User', 'max_no_images') ),//automatically use value of the field as parameter
        ),
    );
}

2Model_User以两种方式改变。首先,您需要一个常量或其他类型的变量来确定允许的最大图像数量。接下来,您将需要定义max_no_images检查是否已达到最大图像数量(如果已达到,则返回 false)。它可以通过 ORM 轻松完成,但如果您直接使用查询可能会更快。

public static function max_no_images($user_id)
{
    $number_of_children = ORM::factory('User', $user_id)->children->count_all();
    return ($number_of_children < Model_User::max_children);
 }

虽然这里发布的代码没有经过测试,但我做了一个稍微不同的变体,所以这种方法确实有效。在文档中查看他们如何使用同一模型中的指定函数进行验证


cou 可以解决此问题的另一种方法是使用 SQL 规则。我不会多说,你需要在插入/更新图像条目时检查图像的数量,所以从这个想法来看,它与 ORM 方法完全相同。

于 2013-08-20T22:09:07.983 回答