php唯一性查询,ThinkPHP5.0数据更新验证唯一性怎么验证。
問題應該就是更新時的唯一性判定是要排除自身的。
我記得看過tp5驗證這塊的代碼,要是單獨在valide驗證器類里是實現不了的,因為這個類里沒找到怎么獲取傳遞過來的參數。但是在controller中可以實現,但文檔中根本沒有細說,我在他們官方文檔下面的評論中有具體的怎么實現的代碼,可以參考下,或者幫忙貼過來。
自己貼過來吧:
文檔太簡陋了,還要看源碼才行,'name' => 'unique:user,status=1&account='.$data['account'],這種的只能放在controller中,自己來定義rule和message,在單獨的validate類中無法將相關的值傳遞過去。
規則是:unique:【模型類名(或表名)】,【要驗證的字段(或者包含=號或者包含^號,但是必須把本身的條件加入,別以為前面有name了就不把name本身加進去了)】,【要排除的字段】,【主鍵(可不填)】
示例:
$id = $this->request->post('id');
$shopId = session('shop_id');
$name = $this->request->post('name');
$sort = $this->request->post('sort', 0, 'intval');
$postData = [
'name' => $name,
'sort' => $sort
];
$rule = [
'name' => 'require|unique:ArticleCategory,shop_id=' . $shopId . '&name=' . $name,//名稱
'sort' => 'number'
];
$message = [
'name.require' => '分類名稱必須填寫',
'name.unique' => '分類名稱已存在',
'sort.number' => '排序必須填寫整數',
];
$validate = new Validate($rule, $message);
if (!empty($id)) {
$validate->scene('edit',
[
'sort',
'name' => 'require|unique:ArticleCategory,shop_id=' . $shopId . '&name=' . $name . ',' . $id
]);
$validateRes = $validate->scene('edit')->check($postData);
} else {
$validate->scene('add', ['sort', 'name']);
$validateRes = $validate->scene('add')->check($postData);
}
if (true !== $validateRes) {
$data['msg'] = $validate->getError();
return json($data);
}
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的php唯一性查询,ThinkPHP5.0数据更新验证唯一性怎么验证。的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 修改php.ini参数,为何建议用ini
- 下一篇: php 中文 过长 省略号,css实现文