假设我有一个
object
,它与 mission
相关。用户可以上传对象并说明它与这些任务之一有关系。无论如何,是否可以使用 Laravel 的 mission_id
类和规则来检查用户为此对象选择的 Validation
是否确实存在于该数据库中?
这样,我可以检查
mission_id
不仅是一个整数,而且还存在于数据库中。
例如,我想我正在寻找类似的东西:
$rules = array(
'mission_id' => 'foreignKeyExistsInMissions|integer'
)
其中
foreignKeyExistsInMissions
是我正在寻找的验证规则。
'mission_id' => 'required|exists:missions,id',
Missions 是表名,id 是 Mission 表上引用的列名
''mission_id' => 'required|exists:table_name,referenced_column',
<?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')]
];
}
}
在 Laravel 中可以间接实现外键验证。方法如下:
自定义验证规则:您可以创建自定义验证规则来检查相关表中是否存在外键值。您可以使用 Laravel 验证系统提供的存在规则,结合您的自定义逻辑来检查相关表中是否存在外键。
$rules = [
'foreign_key' => [
'required',
Rule::exists('related_table')->where(function ($query) {
$query->where('related_column', 'value_to_check');
}),
],
];```
手动验证:或者,您可以使用 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();