有没有办法使用 Laravel 的验证语法来验证外键?

Posted

技术标签:

【中文标题】有没有办法使用 Laravel 的验证语法来验证外键?【英文标题】:Is there any way to validate a foreign key using Laravel's Validation syntax? 【发布时间】:2015-06-19 03:30:24 【问题描述】:

假设我有一个与mission 相关的object。用户可以上传对象并说它与这些任务之一有关。有没有办法使用 Laravel 的 Validation 类和规则来检查用户为此对象选择的 mission_id 是否确实存在于这个数据库中?

这样,我可以检查mission_id不仅是一个整数,而且存在于数据库中。

例如,我想我正在寻找类似的东西:

$rules = array(
    'mission_id' => 'foreignKeyExistsInMissions|integer'
)

foreignKeyExistsInMissions 是我正在寻找的验证规则。

【问题讨论】:

【参考方案1】:
<?php

namespace App\Http\Requests\Leave\LeaveAssigns;

use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;

class StoreLeaveAssignRequest extends FormRequest

    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    
        return true;
    

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    
        return [
            'role_id' => ['required', Rule::exists('roles', 'id')]
        ];
    


【讨论】:

【参考方案2】:

这应该可行:

'mission_id' => 'required|exists:missions,id',

还有消息:

'mission_id.exists' => 'Not an existing ID',

Source(v4.2 文档)

Source(v5.5 文档)

Source(v7.x 文档)

Source(v8.x 文档)

【讨论】:

不太确定您是如何进行验证的,但this 会检查自定义错误消息(与上面的链接到文档页面相同,但稍远一点) 在 5.5 中工作,但似乎没有记录。 但如果与另一个数据库有关系,我的 laravel 将无法找出这个关系在哪里【参考方案3】:

'mission_id' =&gt; 'required|exists:missions,id', missions 是表名,id 是任务表上引用的列名 ''mission_id' =&gt; 'required|exists:table_name,referenced_column',

【讨论】:

以上是关于有没有办法使用 Laravel 的验证语法来验证外键?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法在 laravel 的不同数据库中对用户进行身份验证?

有没有办法在 Laravel 5 验证规则中为输入名称取别名?

Laravel:缓存和经过身份验证的用户

Laravel - 不能再使用基本身份验证

laravel验证外键个数不大于另一个表的id

Laravel 数组验证消息值