【问题标题】:How to store changed form input in database in laravel 5.4如何在 laravel 5.4 的数据库中存储更改的表单输入
【发布时间】:2017-11-13 03:40:41
【问题描述】:

我试图在验证之前更改 laravel 中的表单输入,但我确实设法更改了 listFormRequest 中的输入。当我在 listFormRequest 和我的控制器中使用 dd($data) 时,这一点很明显。 具体来说,我使用了 thislaravel 5.4 modify data before validation in request。但我的问题是现在我不知道如何将更改的输入保存到数据库。 我的列表形式示例代码是

 public function rules()
{
      return [
        'title' =>'required',
        'description' =>'required',
        'url' =>'required',
        ];

}
  /**
 * Get data to be validated from the request.
 *
 * @return array
 */
protected function validationData()
  {
    $data = parent::validationData();
    if (is_string($url = array_get($data, 'url')))
    //dd($data);
    $query = 'amzsome=klwo';
    $parsedUrl = parse_url($url);
    parse_str($parsedUrl['query']);
    $url = 'https://'.$parsedUrl['host'] . $parsedUrl['path']. '?' .  $query;
    $data['url'] = $url;
    //dd($data);
    $this->replace($data);
     $data->create([ $request->input('url')]);
    //dd($data);
    return $data;

  }

具体来说,我通过分配一些查询来替换 url 的查询部分 对用户提交的链接的新查询。
dd($data) 清楚地向我显示了更改,当我尝试执行代码但更改的输入未存储在数据库中时。 对于更改输入,我有两种选择。(抱歉,这可能会将我的问题变成多个问题)。 1.首先将替换的输入保存到数据库中(如果第二个不可能)。 2.其次(如果可能)按原样保存原始输入并为更改的输入创建新列并将其与原始输入一起存储而不在表单中创建输入字段。

【问题讨论】:

    标签: validation laravel-5


    【解决方案1】:

    好吧,上面的代码工作正常。正如我已经提到的,我可以使用 dd($data) 获取更改的请求。但问题是我未能将请求注入数据库。 发布答案以防其他人需要相同的帮助。 使用

    $post = new Post;
    $post->title = $request->title;
    $post->description = $request->description;
    $post->url = $request->url;
    $post->save();
    

    代替:

    Post::create(request(['title','description','url']));
    

    所以我现在的问题是 为什么会出现这种行为,上面的代码有什么区别。 如果必须(如果需要),我会发布一个新问题。

    【讨论】:

    • 是否可能需要将它们添加到可填充数组中? Laravel prevents mass-assignment 如果你不将文件名添加到模式中的fillable 数组中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-23
    • 1970-01-01
    • 2017-12-05
    • 1970-01-01
    • 1970-01-01
    • 2018-11-13
    相关资源
    最近更新 更多