Laravel 5:工作时间的 Eloquent & form 模型
Posted
技术标签:
【中文标题】Laravel 5:工作时间的 Eloquent & form 模型【英文标题】:Laravel 5: Eloquent & form model for business hours 【发布时间】:2015-12-09 12:34:57 【问题描述】:我正在尝试为我的用户实施营业时间。所以我有基本的用户表和 user_business_hours 表,如下所示:
| id | user_id | weekDay | start_time | end_time | created_at | updated_at |
|---:|---------|--------:|------------|----------|------------|------------|
| 1 | 10 | 1 | 10:00:00 | 12:00:00 | ... | ... |
| 2 | 10 | 1 | 13:30:00 | 18:00:00 | ... | ... |
现在的问题: 如何查询此模型并设置 Form::model() / 输入,laravel 将在更新特定用户的营业时间时自动使用提供的值填充必要的输入?
我在考虑这个输入组织:
| ... | Work From | Work From | add new row |
|---------|-----------|-----------| ----------- |
| Monday | 10:00:00 | 12:00:00 | + |
| Monday | 13:30:00 | 18:00:00 | + |
| Tuesday | <input> | <input> | + |
请注意,用户可以根据需要设置每天多次(添加新行列)。
感谢您的想法
【问题讨论】:
我自己还没有遇到过这种情况,但是我发现this other stacklink which night给出了解决方案。这里的解决方案不使用 Form::model,而是使用 Form::open。 ***.com/questions/20684932/… 我们遇到了类似的问题,不好的是 laravel 不会自动匹配数组输入名称。我认为您必须遍历所有 business_hours ...问题是 FormBuilder 中的 transformKey() 方法。这会将可以识别数组索引/键的每个字符转换为下划线或其他符号......唯一的方法是将模型转换为数组并将数组用作模型,然后它可以匹配诸如“example [0 ]" 到数组元素 [example => [0 => 'xxx']]] 【参考方案1】:解决方案是将模型转换为数组:
!! Form::model($model->toArray(), []) !!
!! Form::text('business_hour[0][from]', null, []) !!
!! Form::text('business_hour[0][to]', null, []) !!
!! Form::text('business_hour[1][from]', null, []) !!
!! Form::text('business_hour[2][to]', null, []) !!
!! Form::close() !!
取决于您的数组结构 - 在后台运行 array_get() 助手,并使用 transformKey() 方法转换字段名称。
protected function transformKey($key)
return str_replace(['.', '[]', '[', ']'], ['_', '', '.', ''], $key);
如果您将模型作为对象交付,则内部的所有内容也必须是对象,则无法使用以下内容:
'key' => [
'hallo' => 'welt'
]
【讨论】:
以上是关于Laravel 5:工作时间的 Eloquent & form 模型的主要内容,如果未能解决你的问题,请参考以下文章
PHP 干货5 个 Laravel Eloquent 小技巧
Laravel 5.4 Eloquent where parent