我的数据库中有两个表,一个为practitioner
,第二个为practitioner_specialty
,它们都具有字段effective_date
和expiry_date
。当我使用表单更新两个表时,最后的effective_date
和expiry_date
都将保存到两个表中,而不是两个单独的表中。
有没有一种方法可以阻止一个表的更新,所以我只能更新第二个表,或者有没有一种方法可以使用不同的ID /名称保存它,因此它们对于practitioner
和{{1}来说是唯一的。 }?
这是我的表格和用于更新表格的控制器。
控制器:
practitioner_specialty
blade.php中的更新表单:
public function updatePractitioner(Request $request, $id)
{
$this->validate($request, [
'effective_date' => 'required',
]
);
$fields = $request->all();
$primary_key = $this->PractitionerRepository->getIdName();
$primary_key_specialty = $this->PractitionerSpecialtyRepository->getIdName();
$practitioner_specialty_id = PractitionerSpecialty::where('practitioner_id', $id)->value('practitioner_specialty_id');
$fields[$primary_key] = $id;
$this->PractitionerRepository->update($fields);
$fields[$primary_key_specialty] = $practitioner_specialty_id;
$this->PractitionerSpecialtyRepository->update($fields);
return back()->with('successUpdate', 'Practitioner has been updated!');
}
答案 0 :(得分:3)
两个表都使用相同的数组,因此需要更新所有字段。您可以尝试排除一种形式的表单,然后将其添加到另一种表单中,例如:
$practictionerFields = $request->except('expiry_date', 'effective_date');
$practictionerFields[$primary_key] = $id;
$this->PractitionerRepository->update($practictionerFields);
// and use the other $fields array for the PractitionerSpecialty model.
答案 1 :(得分:0)
您可以在此处使用LOCK查询。 lock是与表关联的标志。 MySQL允许客户端会话显式获取表锁,以防止其他会话在特定时间段内访问同一表。客户端会话只能为其自身获取或释放表锁。它无法获取或释放其他会话的表锁。
您可以在此处了解更多信息:http://mysqltutorial.org/mysql-table-locking