Php 如何从JSON在雄辩的ORM中保存具有相关记录的模型 目标

Php 如何从JSON在雄辩的ORM中保存具有相关记录的模型 目标,php,mysql,json,angularjs,eloquent,Php,Mysql,Json,Angularjs,Eloquent,一个雄辩的模型,校友,与学校有着多对多的关系。一个校友可以去很多学校,一个学校可以有很多校友 使用Eloquent,我可以检索并输出她的学校的校友,如下所示: $alums = Alum::with('schools')->get(); echo $alums->toJson(); { "id":1, "name":"John Doe", "schools": [ { "id":1, "name

一个雄辩的模型,
校友
,与
学校
有着多对多的关系。一个校友可以去很多学校,一个学校可以有很多校友

使用Eloquent,我可以检索并输出她的学校的校友,如下所示:

$alums = Alum::with('schools')->get();
echo $alums->toJson();
{
    "id":1,
    "name":"John Doe",
    "schools": [
        {
            "id":1,
            "name":"School A"
        },
        {
            "id":2,
            "name":"School B"
        }
    ]
}
AngularJS然后在一张表中显示明矾。每一行都有一个编辑按钮,显示一个对话框,其中包含校友可能去过的所有学校的复选框。选中一个框会将该学校添加到校友的
学校
数组中,取消选中一个框会将其删除

到目前为止还不错

问题 将数据发布或放回服务器是出现问题的地方。发送到服务器的JSON如下所示:

$alums = Alum::with('schools')->get();
echo $alums->toJson();
{
    "id":1,
    "name":"John Doe",
    "schools": [
        {
            "id":1,
            "name":"School A"
        },
        {
            "id":2,
            "name":"School B"
        }
    ]
}
明矾的记录保存了下来,但雄辩者不知道如何处理学校的阵列

尝试解决方案 从中,保存相关记录的方法似乎是使用
attach
<代码>附加采用ID数组,而不是对象数组,因此我尝试以下方法:

// Get the IDs of the schools that this user attended
$schoolIds = [];
foreach ($obj->schools as $school) {
    $schoolIds[] = $school->id;
}

$alum->schools()->attach($schoolIds);
$alum->save();
这是可行的;校友和他的学校被保存到数据库中。但还有一个新问题:当校友的学校名单中没有校友时,如何将它们分开。我想我可以得到所有学校的ID,将检查过的学校数组中的ID拼接出来,然后将结果传递给
detach
——但我希望有比这更优雅的方法


从JSON中保存记录及其相关记录的最佳方法是什么?

有趣的是,发帖似乎可以直接引导您自己找到解决方案。在雄辩的文档中,我错过了
sync

sync方法接受要放在透视表上的ID数组。此操作完成后,只有数组中的ID才会位于模型[]的中间表上

attach
替换为sync后,校友的学校列表中只保存选中的学校

不过,我仍然好奇是否有更好的方法直接从JSON保存相关记录。欢迎更多输入。