如何在多个记录中设置单元格的值 - laravel、ajax

how to set value of cell in multiple record - laravel, ajax

我使用AJAX机制来设置在这个table中创建或修改记录:

table: 
id | item_type | item_id | creator_id | attitude 
1  | exemplar  | 3       | 33         | 1
2  | exemplar  | 4       | 33         | 0 
3  | exemplar  | 3       | 35         | 1

通俗地说:一个用户有很多范例可供选择。给定的用户只能将一个范例设置为值 1。在这种特殊情况下,范例 #3 处于活动状态(态度 = 1)。我想将其 "attitude" 设置为 0 并在我具有以下代码的同一控制器方法中。

下面的代码为以前从未选择过的范例创建一条新记录,或者更改“态度”列的值。

    $user_id = Auth::user()->id;
    $countatt = $exemplar->attitudes()->where('creator_id',  $user_id)->first();
    if (!$countatt)
    {
        $countatt = new Userattitude;
        $countatt->creator_id = $user_id;
        $countatt->item_type = 'exemplar';
        $countatt->item_id = $exemplar_id;
            }
    $countatt->attitude = $value; // $value = 1
    $countatt->save();

要解决的问题: 1. 如何使用最佳实践将同一用户 (creator_id) 和 exemplar_id 的所有其他记录设置为 0

我最好的猜测是将以下 4 行放在上面引用的代码之前:

$oldactive= Exemplar::where('creator_id', $user_id)->where(exemplar_id, $exemplar_id)->first();

$zeroing_attitude= $oldactive->attitudes()->first(); 
$zeroing_attitude->attitude = 0;
$zeroing_attitude->save();

;

  1. 以上解决方案仅在只有一个 'attitude' 值设置为 1 的范例的情况下有效。但将来我希望允许用户激活多个范例。我对 Eloquent 不够熟悉,无法重写多个活动示例的逻辑。

  2. 有时会没有活动的范例集,这意味着该集合将是空的

    $oldactive= Exemplar::where('creator_id', $user_id)->where(exemplar_id, $exemplar_id)->first();

在这种情况下,我应该如何跳过执行其余代码?通过如下添加 IF?

if($oldactive) {}

谢谢。

$oldactive= Exemplar::where('creator_id', $user_id)->where(exemplar_id,$exemplar_id)->first();

foreach($oldactive->attitudes() as $zeroing_attitude){ 
    $zeroing_attitude->attitude = 0;
    $zeroing_attitude->save();
}