Laravel - 数据归档,删除并插入到另一张表

3
当我点击删除按钮时,我想要删除数据并将其插入到另一个表中,这个表是存档表,该怎么做?
例如,我的新表模型名为Archive,新表名为archive 这是我的Destroy公共函数:
public function destroy($id)
{
    $client = Client::find($id);
    $client->delete();

}

我的商店公共函数:

$client = new Client;
$client->client_code = $request->input('client_code');
$client->client_name = $request->input('client_name');
2个回答

1

那为什么不使用软删除作为您的存档呢?这样做操作,如恢复、获取等将更加容易。

进行软删除需要该模型。

use SoftDeletes;

在你的迁移表中

$table->softDeletes();

当你运行$client->delete();时,模型只会被标记为已删除,并且不会出现在查询中,除非你在查询中使用withTrashed()。如果你想恢复它,运行$client->restore()

https://laravel.com/docs/5.7/eloquent#soft-deleting


或者你所要求的解决方案。
public function destroy($id)
{
    $client = Client::find($id);

    Archive::create([
      'client_code' => $client->client_code,
      'client_name' => $client->client_name
    ])

    $client->delete();

}

如果存档数据已被删除,不确定如何将其连接到客户端,也许可以使用用户ID来确定谁拥有哪些数据。但仍建议对此使用软删除。

嗯...我想展示我的归档,那么SoftDeletes会在另一个blade文件中显示我的归档吗?您可以看到我有两个按钮,分别是“启用”和“禁用”...禁用按钮会归档我的数据而不是删除它,并将其存储到archive.blade.php中。启用按钮则会将我的归档返回到client.blade.php页面。 - user10665294
如果您只想删除和恢复,那么您不需要Archive表,您只需对其进行SoftDelete,当用户启用后再将其恢复即可。您不需要来回复制,可以使用Client::withTrashed()->find($client_id)->restore();来恢复已删除的数据。 - Ganesh Ghalame
可以的,如果你使用 withTrashed 或者 withOnlyTrashed,你可以在一个单独的 blade 中显示它们。 - Marcus
@Marcus,我已经阅读了文档。所以在软删除中,您不需要为存档创建另一个表,对吗?只需使用软删除,即使您在网站上删除了数据,它也会保留在数据库中,对吗? - user10665294
是的,那是正确的。只有当您使用forceDelete();时,数据才会被删除。 - Marcus

0

我是这样做的

public function archive()
{
    DeviceRawDataArchive::create($this->toArray());
    $this->delete();
}

并在我的控制器中这样调用

$rawData->archive();

希望这能对某人有所帮助。软删除是不错的,但我处理数百万行数据,最好将它们归档,这样我的Cron作业就可以更快地运行了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接