我使用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.但是将来我希望允许用户有多个活动示例。我不熟悉Eloquent足以重写多个活动范例的逻辑。
有时会没有设置有效的范例,这意味着此集合将为空
$ oldactive = Exemplar :: where(' creator_id',$ user_id) - > where(exemplar_id,$ exemplar_id) - > first();
在这种情况下,我应该如何跳过执行其余代码?通过添加IF如下?
if($oldactive) {}
谢谢。
答案 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();
}