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

问题描述 投票:0回答:5

假设我有一个

object
,它与
mission
相关。用户可以上传对象并说明它与这些任务之一有关系。无论如何,是否可以使用 Laravel 的
mission_id
类和规则来检查用户为此对象选择的
Validation
是否确实存在于该数据库中?

这样,我可以检查

mission_id
不仅是一个整数,而且还存在于数据库中。

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

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

其中

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

php validation laravel
5个回答
82
投票

这应该有效:

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

还有消息:

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

来源(v4.2 文档)

来源(v5.5 文档)

来源(v7.x 文档)

来源(v8.x 文档)


1
投票

'mission_id' => 'required|exists:missions,id',
Missions 是表名,id 是 Mission 表上引用的列名
 ''mission_id' => 'required|exists:table_name,referenced_column',


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')]
        ];
    }
}


0
投票

在 Laravel 中可以间接实现外键验证。方法如下:

自定义验证规则:您可以创建自定义验证规则来检查相关表中是否存在外键值。您可以使用 Laravel 验证系统提供的存在规则,结合您的自定义逻辑来检查相关表中是否存在外键。


$rules = [
    'foreign_key' => [
        'required',
        Rule::exists('related_table')->where(function ($query) {
            $query->where('related_column', 'value_to_check');
        }),
    ],
];```


0
投票

手动验证:或者,您可以使用 Laravel 的查询生成器或 Eloquent ORM 手动验证控制器方法中的外键。

$validatedData = $request->validate([
    'foreign_key' => 'required',
]);

$exists = DB::table('related_table')
            ->where('related_column', $validatedData['foreign_key'])
            ->exists();

if (!$exists) {
    // Handle validation failure
}

或者如果您使用 Eloquent:

$exists = RelatedModel::where('related_column',$validatedData['foreign_key'])->exists();
© www.soinside.com 2019 - 2024. All rights reserved.