【问题标题】:How to store multi select values in Laravel 5.2如何在 Laravel 5.2 中存储多选值
【发布时间】:2016-11-12 08:03:13
【问题描述】:

我有一个存储新闻的表单。

这里我使用的是多选,我想将表格中所有选定的选项保存为用户、员工、电影院等字符串。

我存储值的控制器功能是

 public function store(Request $request)
{

    $input=$request->all();

    General_news::create($input);
    return redirect()->back();
}

这个函数存储所有提交的字段,但对于多选它只存储最后一个选项,即cinemahall

当提交表单时,所有选择的选项都会显示,但它没有正确保存在数据库表中。

帮我解决这个问题。

【问题讨论】:

  • 你能用 html 标记更新你的问题吗?

标签: php laravel laravel-5.2 multi-select


【解决方案1】:

谢谢@Chay22

你也可以使用 Mutators 和 Accessor https://laravel.com/docs/5.4/eloquent-mutators#defining-an-accessor

public function setFooAttribute($value)
{
    $this->attributes['foo'] = implode(',',$value);
}

public function getFooAttribute($value)
{
    return explode(',',$value);
}

【讨论】:

    【解决方案2】:

    如果您使用多选,这可能意味着您需要多对多关系和数据透视表。有点像posts 可以属于许多tagstags 可以属于许多posts

    在您的情况下,这可能介于 newsnews_types 表之间。

    【讨论】:

    • 感谢您的回答,但我想将其作为字符串存储在单个表中,而不是维护多个表及其关系......我知道我的方法不适合规范化数据库....
    【解决方案3】:

    确保将 name 属性设置为数组

    <select multiple="multiple" name="news[]" id="news">
    

    将其存储为以逗号分隔的字符串

    $news = $request->input('news');
    $news = implode(',', $news);
    

    你有一个看起来像Users,staff,cinemahall 的字符串。现在,要检索所有输入,您可能需要一一检索,因为您需要改变 news 值。此外,您还可以使用except() 方法将news 排除在批量获取所有值之外。

    $news = $request->input('news');
    $news = implode(',', $news);
    
    $input = $request->except('news');
    //Assign the "mutated" news value to $input
    $input['news'] = $news;
    
    General_news::create($input);
    return redirect()->back();
    

    【讨论】:

    • 感谢您的帮助,还有一个查询,您能帮我做反向操作吗,现在在编辑时我想从表中获取字符串并将其显示为多选。
    • 要将字符串转换为数组,可以使用explode(',', $string);
    猜你喜欢
    • 2021-06-22
    • 2019-12-24
    • 1970-01-01
    • 2016-09-05
    • 2017-10-25
    • 2016-07-07
    • 1970-01-01
    • 1970-01-01
    • 2021-08-23
    相关资源
    最近更新 更多