同步获取 eloquent laravel

sync fetch eloquent laravel

我有这个数组:

  $ingredients_alergens = [
    1285 => [ //id from ingredient
      4, //id from alergen
      2
    ]
    1286 => [
      6
    ]
    1287 => [
      1
    ]
    1288 => [
      9
    ]
  ]

我想进行类似于此的大规模同步:

$ingredient->alergens()->sync([1,3,8]);

但所有数组。我想为完整列表制作一个 únic sync/upsert/something 并且不要查询查询。因为我有 arrays/jsons 来自一千多个记录。

有没有什么方法可以在 eloquent laravel 中构建大规模同步(进入单个查询,如更新插入)?

您有许多 Ingredient(1285、1286、1287、1288),因此您需要先获取所有这些,然后针对每个,同步关系。

您可以使用 $ingredients_alergens 变量用这两行来完成:

$ingredients_alergens = [
    1285 => [4, 2],
    1286 => [6],
    1287 => [1],
    1288 => [9],
];

Ingredient::findMany(array_keys($ingredients_alergens)) // findMany([1285, 1286, 1287, 1288])
    ->each(fn(Ingredient $i) => $i->alergens()->sync($ingredient_alergens[$i->id]));

如果您不想sync删除现有的过敏原。 (例如,您只想将过敏原 9 添加到成分 1288),请使用 syncWithoutDetaching() 而不是 sync()