提问者:小点点

如何删除用户在删除帐户的帖子?


我刚做了一个账户删除功能,但我遇到了一个问题。我还需要删除用户的帖子,在删除帐户。我怎样才能做到?我有表用户,其中我有来自用户的所有详细信息,还有表帖子,其中还有帖子的用户idid标题图像

公共函数删除($id)

public function delete($id)
    {
        $profile = User::find($id);


        $profile->delete();
        Session::flash('remove', "The profile was successfully deleted!");
        return redirect('login');
    }

Profile.php

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Profile extends Model
{

    protected $guarded = [];

    public function profileImage(){

        $imagePath = ($this->image) ?  $this->image : 'profile/vx2k9TEhkcgaRdOWKvs4lsxqOVmuzwumtwySEnvH.png';
        return '' . $imagePath;
    }

    public function user(){

        return $this->belongsTo(User::class);
    }

    public function followers(){
        return $this->belongsToMany(User::class);

    }


}

使用者php

<?php
namespace App;


use App\Mail\NewUserWelcomeMail;
use Illuminate\Notifications\Notifiable;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Support\Facades\Mail;
use Actuallymab\LaravelComment\CanComment;


class User extends Authenticatable
{
    use Notifiable;
    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'username', 'password',
    ];
    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];
    /**
     * The attributes that should be cast to native types.
     *
     * @var array
     */
    protected $casts = [
        'email_verified_at' => 'datetime',
    ];
    protected static function boot()
    {
        parent::boot();

        static::created(function ($user) {
            $user->profile()->create([
                'title' => $user->username,
            ]);

        });
    }
    public function posts()
    {
        return $this->hasMany(Post::class)->orderBy('created_at', 'DESC');
    }



    public function profile()
    {
        return $this->hasOne(Profile::class);
    }
}

邮递php

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;


class Post extends Model 
{
    protected $guarded = [];


    public function user(){

        return $this->belongsTo(User::class);
    }

    public function likes()
    {
        return $this->hasMany('App\Like');
    }

    public function comments()
    {
        return $this->hasMany('App\Comment');
    }

    public function tags()
    {
        return $this->belongsToMany('App\Tag');
    }


}

public function up()
    {
        Schema::create('posts', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->unsignedBigInteger('user_id');
            $table->string('caption');
            $table->string('image');
            $table->timestamps();


            $table->index('user_id');
        });
    }

共1个答案

匿名用户

我认为你可以在用户之前删除控制器中的相关模型,即:

public function delete($id)
{
   $profile = User::find($id);
   $profile->posts()->delete();

   $profile->delete();
   Session::flash('remove', "The profile was successfully deleted!");
   return redirect('login');
}

或者您也可以参加模型活动,即:

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

    static::created(function ($user) {
        $user->profile()->create([
            'title' => $user->username,
        ]);

    });

    static::deleting(function($user) {
        $user->posts()->delete();
    });
}