这是我的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约束,如上所示,但当我删除用户时它不起作用。柱子还在那儿。我不知道我做错了什么
4条答案
按热度按时间wnvonmuf1#
创建自定义方法,如
function destroyAllByUser()
把代码写成我希望这会有帮助
dz6r00yl2#
另一种解决方法是在laravel project\config文件夹下配置database.php文件以在innodb引擎上工作。
现在你不用担心当你使用外键时。。。请记住-如果您在创建表之前没有配置此配置,则应该再次重新混合。
brqmpdu13#
出现此问题的原因很可能是mysql示例中的默认表引擎设置为myisam,而myisam不支持外键。尝试在myisam表上使用外键绝对不是laravel中的bug。如果使用外键,schema builder可以自动将引擎设置为innodb,那就更好了。
所以,在你的模式中使用这一行
或者用
可能对你有帮助。
1cosmwyk4#
删除用户;