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

Posted

技术标签:

【中文标题】laravel验证外键个数不大于另一个表的id【英文标题】:laravel validation the number of forging key not greater than the id of anther table 【发布时间】:2018-07-06 14:29:22 【问题描述】:

我正在使用laravellaravel validation 是我用过的最好的验证,但现在我在花药表中有foreign 键的表,像这样

  ADD CONSTRAINT `items_item_color_foreign` FOREIGN KEY (`item_color`) REFERENCES `colors` (`id`),
  ADD CONSTRAINT `items_item_default_unit_foreign` FOREIGN KEY (`item_default_unit`) REFERENCES `units` (`id`),
  ADD CONSTRAINT `items_item_inserter_foreign` FOREIGN KEY (`item_inserter`) REFERENCES `users` (`id`),
  ADD CONSTRAINT `items_item_state_foreign` FOREIGN KEY (`item_state`) REFERENCES `item_states` (`id`);

现在在请求验证中我写了这个

'item_id' => 'required|unique:items|max:250|min:1',
'item_desc_ar' => 'required|unique:items|max:250|min:1',
'item_desc_en' => 'max:250|min:1|nullable',
'item_default_unit' => 'required|integer',

现在在item_defult_unit 中,它是必需的整数,但在后期它可能比 item_units 中的 id 多 我怎样才能让这样的验证

'item_default_unit' => 'required|integer|and not more than id in anther table',

谢谢,

【问题讨论】:

您可以简单地在您的情况下附加 max 验证,您需要添加类似 max:$valueFromOtherTable 的内容,您可以在其中编写雄辩的查询以获取 $valueFromOtherTable 你能写出完整的例子吗 是的,写答案,另一张桌子的名字是什么? 表名是单位 如果解决方案有效,只需将答案标记为已接受 【参考方案1】:

您需要附加max 验证,动态值如下:

'item_default_unit' => 'required|integer|max:'.Unit::max('id')
//model name is Unit

它的简单技巧是通过从模型中获取max 的动态值。

【讨论】:

【参考方案2】:

你可以的

$unit = DB::table('units')->latest()->first();
'item_default_unit' => 'required|integer|max:'.$unit->id

【讨论】:

以上是关于laravel验证外键个数不大于另一个表的id的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 laravel 8 验证来自另一个(买家)表的数据(请求中)

PHP Laravel 根据投票表的外键从问题表中获取所有问题

如何在 Laravel 中从外键中查看表字段

如何在Laravel中查看外键中的表字段

Laravel 5 迁移 - 外键约束失败

怎样将EXCEL工作表中某列数值小于一个数的行删除,或将工作表中某列数值大于一个数的行统计到另一个工作表