gpt4 book ai didi

php - Laravel 多态关系 commentable_type 验证

转载 作者:可可西里 更新时间:2023-11-01 13:59:52 33 4
gpt4 key购买 nike

我正在使用 REST API 接收数据。
数据模型是多态相关的,类似于文档中的模型:
https://laravel.com/docs/5.4/eloquent-relationships#polymorphic-relations

posts
id - integer
title - string
body - text

videos
id - integer
title - string
url - string

comments
id - integer
body - text
commentable_id - integer
commentable_type - string

比方说,API 正在接收这条新评论:

{
"body": "This a test comment",
"commentable_type": "posts",
"commentable_id": "1"
}

如何验证收到的 commentable_type 是否存在且有效?

最佳答案

如果我正确理解了你的问题,那么你正在尝试验证多态关系的对象是否存在,对于给定的 commentable_typecommentable_id

如果是这种情况,则没有现有的验证规则可以这样做,但您可以创建一个。
基于the documentation ,这是您可以执行的操作:

首先,在服务提供者(例如AppServiceProvider)的boot方法中添加新规则:

Validator::extend('poly_exists', function ($attribute, $value, $parameters, $validator) {
if (!$objectType = array_get($validator->getData(), $parameters[0], false)) {
return false;
}

return !empty(resolve($objectType)->find($value));
});

这就是您将如何使用它:

'commentable_id' => 'required|poly_exists:commentable_type

规则所做的是尝试从输入值中获取可注释类型(基于传递给规则的参数,即在我们的例子中为 commentable_type),然后解析对象和尝试查找给定 ID ($value) 的记录。

请注意,要使其正常工作,commentable_type 的值必须是完全限定的类名(例如 App\Models\Post)。

希望这对您有所帮助!

关于php - Laravel 多态关系 commentable_type 验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41962394/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com