真的不知道如何处理这一点,但我有entry_id(外键)和键/值这样的元表:Laravel 5 - firstOrCreate()并删除旧项目?
id | entry_id | key | value
-------------------------------------------
1 4 Fruit 1 Apple
2 4 Fruit 2 Banana
3 4 Fruit 3 Cantaloupe
我想关键的新列表更新entry_id 4
/值对Fruit 1/Apple
和Fruit 4/Dragonfruit
,这应该是这样的:
id | entry_id | key | value
-------------------------------------------
1 4 Fruit 1 Apple
4 4 Fruit 4 Dragonfruit
因此,这里有3件事情应该发生:
Fruit 1/Apple
没有改变,所以它应该保持不变。Fruit 4/Dragonfruit
是新增的,因此应该添加。- 新的更新列表没有
Fruit 2/Banana
或Fruit 3/Cantaloupe
,所以应该删除它们。
我尝试使用firstOrCreate()
这样的:
// $metas is an array of the new list
foreach ($metas as $meta) {
$entry->entryMeta()->firstOrCreate([
'entry_id' => $entry->id,
'key' => $meta->key,
'value' => $meta->value
]);
}
这需要3件事情应该发生的第2个要点的照顾。删除不在新列表中的旧项目的最后一个要点不起作用(我知道它不是firstOrCreate()
的一部分)。
任何想法如何照顾所有3个重点?
您是否要求ID对于现有条目保持不变并且对新条目保持自动递增? – tam5
此外,你只想改变那些你正在使用'entry_id'的行,而其他行将保持不变,请让我知道如果这是正确的,以确保我明白 – tam5
@tam Yup,我老实说,关心ID很多,我只是不想重新插入那里的东西(也许每次更新项目时系统上会做更多的工作,只需擦拭干净并重新插入即可)?更正您的第二条评论,我一次只能处理属于单个'entry_id'的键/值行。 – Wonka