删除与laravel中用户相关的所有帖子

bttbmeg0  于 2021-06-20  发布在  Mysql
关注(0)|答案(4)|浏览(340)

这是我的table

public function up()
        {
            Schema::create('posts', function (Blueprint $table) {
                $table->increments('id');
                $table->unsignedInteger('user_id');
                $table->integer('category_id')->unsigned()->index();
                $table->integer('photo_id')->default(0)->unsigned()->index();
                $table->string('title');
                $table->text('body');
                $table->timestamps();

                $table->foreign('user_id')
                    ->references('id')->on('users')
                    ->onDelete('cascade');

            });
        }

这是我的用户表

public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('role_id')->index()->unsigned()->nullable();
            $table->integer('photo_id')->index()->default(0);
            $table->boolean('is_active')->default(0);
            $table->string('name');
            $table->string('email')->unique();
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
        });
    }

这就是关系

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

public function user() {
        return $this->belongsTo('App\User');
    }

删除用户代码

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

        if($user->photo_id !== 0) {
            unlink(public_path() . $user->photo->path);
        }

        $user->delete();

        Session::flash('deleted_user', 'The user has been deleted.');

        return redirect('/admin/users');
    }

删除岗位代码

public function destroy($id)
    {
        $post = Post::findOrFail($id);

        if($post->photo_id !== 0) {
            unlink(public_path() . $post->photo->path);
        }

        $post->delete();

        return redirect('/admin/posts');

    }

当我删除一个用户时,我正在尝试删除与该用户相关的所有帖子。为此,我在posts表中使用了foreign reference约束,如上所示,但当我删除用户时它不起作用。柱子还在那儿。我不知道我做错了什么

wnvonmuf

wnvonmuf1#

创建自定义方法,如 function destroyAllByUser() 把代码写成

DB::table('posts')->where('user_id', '=', 1)->delete();

我希望这会有帮助

dz6r00yl

dz6r00yl2#

另一种解决方法是在laravel project\config文件夹下配置database.php文件以在innodb引擎上工作。

'mysql' => [
   ...

   'engine' => 'InnoDB'
 ]

现在你不用担心当你使用外键时。。。请记住-如果您在创建表之前没有配置此配置,则应该再次重新混合。

brqmpdu1

brqmpdu13#

出现此问题的原因很可能是mysql示例中的默认表引擎设置为myisam,而myisam不支持外键。尝试在myisam表上使用外键绝对不是laravel中的bug。如果使用外键,schema builder可以自动将引擎设置为innodb,那就更好了。
所以,在你的模式中使用这一行

$table->engine = 'InnoDB';

或者用

ALTER TABLE table_name ENGINE=InnoDB;

可能对你有帮助。

1cosmwyk

1cosmwyk4#

删除用户;

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

    if($user->photo_id !== 0) {
        unlink(public_path() . $user->photo->path);
    }

    $user->posts->delete();

    $user->delete();

    Session::flash('deleted_user', 'The user has been deleted.');

    return redirect('/admin/users');
}

相关问题