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 列中插入数组对象的主要内容,如果未能解决你的问题,请参考以下文章