【问题标题】:Find and update multiple Json data in one column using Laravel and Eloquent使用 Laravel 和 Eloquent 在一列中查找和更新多个 Json 数据
【发布时间】:2020-03-28 00:59:07
【问题描述】:

如何搜索特定的“checkNo”并获取值,然后对其进行更新。

这是我用来获取数据的查询,但它返回空:

$isUpdate=DB::table('transactions')->whereIn('pdc_data->checkNo', [35343])->get();

[
{
    "calD": "--", 
    "date": "12-02-2019", 
    "Int": "3500", 
    "amount": "20166.666666666668",
    "finInt": "403.33333333333337",
    "checkNo": "35343",
    "remarks": "--",
    "bankName": "Fugit eius aut voluptatem fugiat delectus soluta.",
    "accountNo": "3353", "branchName": "Aut velit qui qui ut."
},
 {
    "calD": "--",
    "date": "12-17-2019",
    "Int": "3500",
    "amount": "20166.666666666668",
    "finInt": "403.33333333333337",
    "checkNo": "35344",
    "remarks": "--", 
    "bankName": "Fugit eius aut voluptatem fugiat delectus soluta.", 
    "accountNo": "3353", "branchName": "Aut velit qui qui ut."
}, 
{
    "calD": "--",
    "date": "01-01-2020",
    "Int": "3500",
    "amount": "20166.666666666668",
    "finInt": "403.33333333333337", 
    "checkNo": "35345", 
    "remarks": "--",
    "bankName": "Fugit eius aut voluptatem fugiat delectus soluta.",
    "accountNo": "3353", "branchName": "Aut velit qui qui ut."
}
]

【问题讨论】:

  • 你试试这个$isUpdate=DB::table('transactions')->where('checkNo', "35343")->update(['remarks'=>'Good'])
  • 这不起作用,因为“checkNo”在 pdc_data 中
  • @DebasisBhakat 如何生成 JSON 数据?
  • @AmitSenjaliya 我没有正确回答您的问题?
  • @DebasisBhakat 以上 JSON 数据可用于$pdc_data 变量?

标签: json laravel eloquent


【解决方案1】:

为了在 json 列中搜索并使用多个参数,您必须使用:

->whereJsonContains('pdc_data->checkNo', ["35343"])

这相当于whereIn 子句

此外,在您的 json 列中,您的该字段有一个 string 值,但您试图传递一个 int,因此您没有返回任何结果,因为变量类型中没有匹配。

请注意,如果您希望此字段实际保存整数值,请确保将其存储为整数,以便您可以检查相同类型的值。

根据整数检查字符串,或将整数视为字符串可能会导致问题。

【讨论】:

  • 我也使用了这个,但这会返回一个空数组 Illuminate\Support\Collection Object ([items:protected] => Array ())
  • 尝试使用简单的 checkNo 字段而不是 pdc_data->checkNo
  • 而这组Json存储在一列中。
  • "尝试使用简单的 checkNo 字段,而不是 pdc_data->checkNo",据说是未知列 'checkNo'
  • 我知道你的错误在哪里。您正在传递一个 int 但在您的数据库中它是一个字符串。这就是它失败的原因/我会更新我的答案。
【解决方案2】:

您需要解码 JSON,然后匹配您的查询。

您应该在whereIn('column name', '45464') 子句中使用transactions 表列名。

$data = json_decode($pdc_data, true);

for($data as $value){
     $isUpdate=DB::table('transactions')->whereIn('Yourcolumn name', $value->checkNo)->get();
}

【讨论】:

  • 我只发送 checkNo 不是完整的 json 数据集
猜你喜欢
  • 1970-01-01
  • 2020-12-20
  • 1970-01-01
  • 2021-03-30
  • 2013-03-04
  • 1970-01-01
  • 1970-01-01
  • 2019-06-12
  • 1970-01-01
相关资源
最近更新 更多