我有两个模型,它们具有以下关系:
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(),
);
}
限制用户图片数量的最佳方法是什么?我想通过在Model_User_Image类中声明const MAX = 3
来设置限制,然后使用此值来检查当前的images
数。有没有办法通过关系或规则来限制它?
答案 0 :(得分:1)
使用Kohana的rules
系统实际上可以解决这个问题,如下所示:
1向Model_User_Image
添加影响父级ID的验证规则。您可以使用指定方法Model_User
的{{1}}。
max_no_images
2以两种方式更改public function rules()
{
return array(
'user_id' => array(
array( array('Model_User', 'max_no_images') ),//automatically use value of the field as parameter
),
);
}
。首先,您需要一个常量或其他类型的变量来确定允许的最大图像数。接下来,您需要定义Model_User
,在其中检查是否已达到最大图像数(如果是,则返回false)。它可以通过ORM轻松完成,但如果直接使用查询可能会更快。
max_no_images
虽然此处发布的代码未经过测试,但我的变体略有不同,所以这种方法确实有效。看看他们如何使用a specified function from the same model for validation in the documentation
cou可以解决此问题的另一种方法是使用SQL规则。我不会说更多,你需要在插入/更新图像条目时检查图像的数量,所以从这个想法来看它与ORM方法完全相同。