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

时间:2015-02-18 09:56:36

标签: ajax laravel laravel-4 eloquent

我使用AJAX机制在此表中设置创建或修改记录:

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)。我想设定其态度"到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. 上述解决方案仅适用于只有一个样本具有“态度”的值的情况。设置为1.但是将来我希望允许用户有多个活动示例。我不熟悉Eloquent足以重写多个活动范例的逻辑。

  2. 有时会没有设置有效的范例,这意味着此集合将为空

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

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

    if($oldactive) {}
    

    谢谢。

1 个答案:

答案 0 :(得分:1)

$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();
}