数组项与其他表之间的雄辩关系

时间:2016-06-22 14:35:17

标签: php laravel eloquent laravel-5.2

我无法理解使这种关系发挥作用所需要的东西。

我有一个包含3个字段的产品更新表单。 更新ID 说明受影响的区域

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

此时我有3张桌子。

  1. update_info - id,description,affected_areas
  2. update_people - id,name,area_id
  3. update_areas - id,area
  4. 我不明白如何使受影响区域的数组与update_areas相关,然后每个区域与具有该区域ID的人员相关。我的接近了吗?

    `public function create(Request $ request)

    {
    
    
        $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()

1 个答案:

答案 0 :(得分:0)

你不能这样做,你需要一个可能被称为update_info_areas之类的数据透视表,但这是你的选择。这个数据透视表中的这个只是帮助扩展表中的那些数组,以便数据库可以使用它们来连接其他表。如果您的{1}} ID 1有10个区域,则在您的数据透视表中,这将是10条记录,其中update_info为每条记录为1,update_info_idarea_idid相关的每个area

此表格的update_info列与您的update_info_id列和update_info.id列相关,与您的area_id列相关。

这会在update_areas.idbelongsToMany之间建立update_info关系。

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

例如,我们假设您尝试将ID为1,3,4,5和6的区域设置为ID为1的update_areas

update_info

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

如果您想在不删除该区域已存在的所有内容的情况下附加或分离某个区域......那就简单了。我们假设您现在要从$updateInfo = UpdateInfo::find(1); $updateInfo->areas()->sync([1,3,4,5,6]); 中删除区域1和区域3,但随后也要添加区域2。

update_info