删除帖子时如何删除laravel中的所有相关评论,喜欢和通知

时间:2019-04-09 08:13:41

标签: php laravel laravel-5

我想删除帖子时删除所有相关数据。当我删除此帖子时,所有喜欢的评论和与此帖子相关的所有通知也会被删除。我怎样才能做到这一点 ?当用户删除其所有帖子,存储桶,评论和报告的用户时,我也会这样做。这是此代码。但我也想删除与该帖子相关的所有内容,例如通知,喜欢等。请帮助。

public function destroy($id)
{
    $user = User::find($id);

    $user->posts()->forceDelete();
    $user->buckets()->forceDelete();
    $user->comments()->forceDelete();
    $user->reportedUser()->forceDelete();

    $user->forceDelete();

    return redirect()->route('users.index')->with('Success','User Deleted Successfully');
}

此代码在删除用户时删除与用户有关的所有东西,但我也想删除与帖子有关的所有东西。我该怎么办?

2 个答案:

答案 0 :(得分:3)

一旦t/usr/lib/arm-linux-gnueabihf -lQt5Widgets -lQt5Gui -lQt5Qml -lQt5Network -lQt5Xml -lQt5Core -Wl,-rpath-link,/opt/qtrpi/raspbian/sysroot/opt/vc/lib -lGLESv2 -lpthread /home/Documents/project/digitalsignage/lib/python2.7//libpython2.7.a : erreur lors de l'ajout de symboles : Format de fichier non reconnu collect2: error: ld a retourné le statut de sortie 1 Makefile:170: recipe for target 'DigitalSignal' failed make: *** [DigitalSignal] Error 1 记录被删除,您就可以model events触发一个动作。在您的Post模型中,您可以添加一个Post属性:

$dispatchesEvents

此后,您可以创建新事件:

protected $dispatchesEvents = [
    'deleting' => \App\Events\PostDeleting::class,
];

应该添加一个新的事件文件(php artisan make:event PostDeleting )。

您可以在此处定义将传递给事件侦听器的数据。

app\events\PostDeleting.php

此后,您将需要创建事件侦听器(它将侦听要删除的帖子):

<?php

namespace App\Events;

use App\Post;
use Illuminate\Queue\SerializesModels;

class PostDeleting
{
    use SerializesModels;

    public $post;

    /**
     * Create a new event instance.
     *
     * @param \App\Post $post
     */
    public function __construct(Post $post)
    {
        $this->post = $post;
    }
}

这将创建一个侦听器(php artisan event:listener PostDeleting )。在这里,您定义删除app/listeners/PostDeleting.php后立即运行的功能(这使用了事件中定义的变量:

Post

答案 1 :(得分:1)

您可以在迁移中进行设置

例如comments迁移

$table->foreign('post_id')
      ->references('id')
      ->on('posts')
      ->onDelete('cascade');

无需编写任何其他逻辑。您可以在关系迁移中编写类似的内容

对于多态关系,例如

Post Model

protected static function boot()
{
    parent::boot();

    static::deleting(function ($post) {
        $post->comments()->delete();
        // ...
    });

}

或 您可以通过Cascade polymorphic delete软件包进行管理