Laravel JSON 数组 Where 函数

Posted

技术标签:

【中文标题】Laravel JSON 数组 Where 函数【英文标题】:Laravel JSON arrays Where Function 【发布时间】:2018-08-05 02:49:52 【问题描述】:

假设我有一个带有列的表出勤:

id, student_id, attendance, date

我收到这样的 JSON 格式的发布请求...

[
    
        "student_id": 5,
        "date": "2018-01-03",
        "attendance": 0
    , 
        "student_id": 2,
        "date": "2018-01-03",
        "attendance": 0
    ,
        "student_id": 2,
        "date": "2018-01-03",
        "attendance": 0
    
]

然后丢掉我们得到的请求->all()...

array:3 [
  0 => array:3 [
    "student_id" => 5
    "date" => "2018-01-03"
    "attendance" => 0
  ]
  1 => array:3 [
    "student_id" => 2
    "date" => "2018-01-03"
    "attendance" => 0
  ]
  2 => array:3 [
    "student_id" => 2
    "date" => "2018-01-03"
    "attendance" => 0
  ]
]

问题是如何在出勤表中保存或更新此请求?

我要比较考勤表中的数据。如果一行包含 student_id 和日期,我必须更新出勤率。如果student_iddate 不存在,我必须创建新数据。

我的问题:是否有任何函数或助手可以将每个数组与出勤列进行比较?

【问题讨论】:

【参考方案1】:

在 cmets 中,您说过要比较 student_iddate 并更新现有记录。使用updateOrCreate() 方法:

foreach ($request->all() as $attendance) 
    Attendance::updateOrCreate($request->only('date', 'student_id'), $request->only('attendance'));

对于这个方法,确保模型有$fillable数组:

protected $fillable = ['student_id', 'attendance', 'date'];

【讨论】:

但是我需要将每个数据与考勤表进行比较,因为我不想一次又一次地添加相同的数据。例如,如果请求带有 student_id=1, date="2018-02-03", admission="1" 数据并且我的出勤表已经有该数据,那么出勤表将有两行具有相同数据的行。希望你能理解。 @AnimeshPandey 你打算如何比较它?您的请求中没有 ID。 我有 student_id 和日期。我想把它和服务员桌比较一下。不可以吗? @AnimeshPandey 这是可能的。我已经更新了答案。

以上是关于Laravel JSON 数组 Where 函数的主要内容,如果未能解决你的问题,请参考以下文章

错误调用数组 Laravel 上的成员函数 where()

在 where 子句 laravel 中使用 Json 属性

Laravel:无法遍历来自json的对象数组

如何在laravel中使用json将json数组打印到jquery表?

Laravel Eloquent - 使用 JSON 对象数组

在 laravel 中使用 AJAX 的数组到 json 问题