阵列项目与其他表之间的雄辩关系



我很难理解使这种关系起作用的需要。

我有一个具有3个字段的产品更新表格。更新ID 描述区域受影响的区域

受影响的区域是我们建筑物中每个工作区域的一组复选框。提交时,所选区域将作为阵列存储在我的表中。我需要在这些领域和其中的所有人员之间建立关系,以便在显示产品更新列表时,我还可以列出所有受此更新影响的人。

此时我有3个桌子。

  1. update_info- id,描述,affected_areas
  2. update_people- id,name,abreat_id
  3. update_areas- id,区域

我不明白如何使受影响区域的数组与update_areas有关,然后每个区域与该区域ID的人员有关。我的临近了吗?

`公共功能创建(请求$请求)

{

    $update = new Update;
    $update->id = $request->number;
    $update->description = $request->description;
    $update->areas()->sync($request->input('area'));
    $update->save();
    return view('updates.index');
}`

这样做我会遇到致命错误。

致命错误:null

上的成员函数sync()

您不能那样做,您需要一个枢轴表可能称为update_info_areas之类的东西,但这是您的选择。这个枢轴表中的这只是一个可以帮助扩展表中的这些数组的东西,以便数据库可以使用它们在其他表上加入。如果您的ID 1的update_info在枢轴表中有10个区域,那将是10个记录,其中update_info_id为每个记录为1,而area_id将是每个areaid,与该update_info有关。

此表将具有与您的update_info.id列和area_id列有关的update_info_id列,该列将与您的update_areas.id列有关。

这将使您在update_infoupdate_areas之间有belongsToMany的关系。

要使用它添加记录,这将非常简单。

为例,假设您正在尝试将ID 1、3、4、5和6的区域设置为update_info,ID为1。

$updateInfo = UpdateInfo::find(1);
$updateInfo->areas()->sync([1,3,4,5,6]);

这将首先删除与该更新信息相关的所有区域并重新添加所选区域。

如果您只想连接或分离某个区域而不删除该区域已经存在的所有内容……这也很简单。假设您现在想从该update_info删除区域1和3,但也附加了区域2。

$updateInfo = UpdateInfo::find(1);
$updateInfo->areas()->detach([1,3]);
$updateInfo->areas()->attach([2]);

最新更新