我可以阻止一张桌子更新吗?

时间:2019-06-28 08:39:51

标签: php laravel

我的数据库中有两个表,一个为practitioner,第二个为practitioner_specialty,它们都具有字段effective_dateexpiry_date。当我使用表单更新两个表时,最后的effective_dateexpiry_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!');
    }

2 个答案:

答案 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