在 CakePHP 中保存时如何验证关联模型是不是存在

Posted

技术标签:

【中文标题】在 CakePHP 中保存时如何验证关联模型是不是存在【英文标题】:How to validate if associated Model exists when saving in CakePHP在 CakePHP 中保存时如何验证关联模型是否存在 【发布时间】:2015-01-27 03:53:07 【问题描述】:

假设我有一个与“客户”模型关联的“订单”模型。

class Order 
   var $belongsTo = array('Customer');

Cakephp 中是否有标准方法来验证 customer_id 字段指向的记录是否存在?

$this->Order->create();
$this->Order->set('customer_id', 1);
$this->Order->set('order_date', date('Y-m-d'));
$this->Order->set('total', 100);
$this->Order->save();

是否有可以应用于 Order 模型的 customer_id 字段的验证规则?或者,我必须定义自定义规则吗?

【问题讨论】:

【参考方案1】:

您必须创建自定义规则才能在模型验证中执行此操作。

也就是说,你想知道的很简单,所以你可以很容易地做到。

public function checkCustomerExists()
    return $this->Customer->exists($this->data[$this->alias]['customer_id']);

假设您正确定义了模型关联,这将解决它。只需使用 'rule' => 'checkCustomerExists' 进行验证输入

【讨论】:

【参考方案2】:

我想有两种解决方案: - 首先:像这样在模型中制定验证规则:

public $validate = array(
    'username' => array(
        'isUnique' => array(
            'rule' => 'isUnique',
            'message' => 'That username has already been taken',
            'on' => 'create'
        ),
        'notEmpty' => array(
            'rule' => 'notEmpty',
            'message' => 'Please enter a username'
        )
    )
);
second : 如果你直接获取这些数据,你可以使用一些 ajax 插件来强制一些字段。例如这样一个:http://jqueryvalidation.org/

希望对你有帮助。

【讨论】:

以上是关于在 CakePHP 中保存时如何验证关联模型是不是存在的主要内容,如果未能解决你的问题,请参考以下文章

CakePHP 3:保存关联模型失败

CakePHP 模型关联 HasMany - 保存错误

在 Cakephp 3 中保存关联模型

CakePHP 3:上传多个文件并将文件名保存在关联模型中?

CakePHP- 保存相关模型数据

CakePHP 保存非常深的关联模型