Laravel从其他表取数写入另一表时字段值格式错误如何解决?
问题根因
你写入的字段值不符合预期,是因为调用了get()方法查询数据,该方法返回的是结果集合(Collection),哪怕只有一条匹配数据,也会被包裹为数组对象结构,直接存入数据库字段时会被序列化为[{"字段名":"值"}]的JSON格式。
另外你的现有代码存在冗余查询的问题,对同一张表发起了3次查询请求,可优化为一次查询完成逻辑。
修复后的代码
Model 代码
public function presensi($data) { // 一次查询获取所需字段,first()直接返回单条结果对象,无匹配数据时返回null $karyawan = DB::table('tbl_karyawan')->where($data)->first(['Nip_kyn', 'Nama_kyn']); if ($karyawan) { $values = [ 'Nip_kyn' => $karyawan->Nip_kyn, // 直接取对象属性,得到纯字符串值 'Nama_kyn' => $karyawan->Nama_kyn, 'Jam_msk' => now(), 'Log_date' => today() ]; DB::table('tbl_absen')->insert($values); } else { echo 'data not available'; } }
如果你不想调整原有代码结构,只需要把原来的get()方法替换为value()方法即可直接拿到字段的纯值:
// 原有代码只需要修改这两行即可 $namakyn = DB::table('tbl_karyawan')->where($data)->value('Nama_kyn'); $nippppp = DB::table('tbl_karyawan')->where($data)->value('Nip_kyn');
Controller代码不需要做任何改动,原有逻辑可正常运行。
内容的提问来源于stack exchange,提问作者Nico Aramy
相关产品推荐
相关产品推荐

