Laravel:在单个 SQL 列中插入数组对象

Posted

技术标签:

【中文标题】Laravel:在单个 SQL 列中插入数组对象【英文标题】:Laravel: insert array object in single SQL column 【发布时间】:2020-06-29 11:21:52 【问题描述】:

我在名为 session 的 db 中有一个单列,我想以数组的形式将以下所有数据插入单列中。

数组中的可用数据

 array:1 [▼
0 => array:3 [▼
"_token" => "ENzbpMgvlOhMkwE1Fv13hjn9NlCOUolIFBDZ4wJd"
"session_start" => "2000-01-01"
"session_end" => "2002-01-01"
]
]

下面我试过了

public function store(Request $request)

  $arr = (array($request->all()));

  $create = SchoolSession::create($arr));

出现错误:数组到字符串的转换

请告知解决方案,并告知如何从 db 中获取相同的内容并单独显示。

【问题讨论】:

请看this 【参考方案1】:

你不能在没有某种序列化的情况下将数组插入数据库字段,所以你可以尝试这样的事情(但有更好的方法,继续阅读):

public function store(Request $request)

    $json = json_encode($request->all());

    $create = SchoolSession::create(['session' => $json]);

确保您的数据库字段类型为 JSON/TEXT,具体取决于您的 mysql 版本。检索数据时还需要decode它。

开箱即用,Laravel 提供了一种简单的机制来处理这个问题。因此,您无需手动 encode/decode 您的数据。 Eloquent 将负责编码 brfore 将其保存到数据库,并且解码将自动处理。阅读文档(上面给出的链接)。

【讨论】:

我使用 json_encode 插入它可以工作,但是当我使用解码时,它以这种形式显示我的数据 "_token":"ENzbpMgvlOhMkwE1Fv13hjn9NlCOUolIFBDZ4wJd","session_start":"2000-01-01","session_end ":"2002-01-01" 关注Mutations/Attribute Casting。 要将json 字符串解码为数组,应使用json_decode($data, true)。这将返回一个数组而不是一个对象 (stdClass)。【参考方案2】:

不能直接在列中添加数组:

public function store(Request $request)

    $arr = $request->all();
    $arr = serialize($arr);
    $create = SchoolSession::create(['session'=>$arr]);

并从数据库中获取相同的内容:

public function view(Request $request)


    $SchoolSession = SchoolSession::where('id','Specific ID ADD')->get();
    $SchoolSession = unserialize($SchoolSession[0]->session);

【讨论】:

获取错误调用未定义函数 Symfony\Component\Routing\serialize() @MuhammadKazim 你用过哪个 laravel 版本?

以上是关于Laravel:在单个 SQL 列中插入数组对象的主要内容,如果未能解决你的问题,请参考以下文章

Laravel - 在数据库中在一列中插入动态图像数组 JQuery

SQL 如何从单个列中的所有值创建 JSON 数组

如何在laravel的json数组列中找到字符串搜索的位置

Laravel 5:将图像网址作为数组插入列

在单个 sql 语句或过程中插入 1000 行

使用 laravel 4 上的循环将数据数组存储到单个数组中