Laravel数据删除

时间:2019-06-12 06:11:13

标签: laravel

如果一个数据表的数据在另一数据表中用作Laravel中的外键,如何防止数据删除? 这是我要从中删除数据的 controller

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Theme;

class ThemeController extends Controller
{

    public function destroy($id)

        Theme::destroy($id);
        return redirect()->route('theme.index')->withFlashSuccess('Theme profile is deleted successfully.');
    }
}

如果该控制器数据在另一个控制器中使用,如何应用条件以停止删除该控制器中的数据?

2 个答案:

答案 0 :(得分:0)

首先请确保您的人际关系正确

从Theme到ThemeLess的关系(在您的Theme模型中)确保您有一个外键theme_id,这是laravel默认查找的内容

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

仅当计数等于或小于0时​​才会删除主题

已更新:您还可以改善删除功能,如果要使用此功能,请确保您的路由如下所示:Route::delete('/theme/{theme}', 'ThemeController@destroy')

public function destroy(Theme $theme)
{
   if (count($theme-> themeLess) <= 0) {
        $theme->delete();
        return redirect('/your/route');
   }else{ 
        return back()->withErrors('failed to delete'); 
   }
}

两种方法都应该解决您的问题,只需确保您的关系正确即可。

答案 1 :(得分:0)

复制并替换为当前功能

  public function destroy($id)
{
    $foriegnKeyCheck = DB::table('general_agreement_theme ')
            ->where('theme_id' ,$id)->get();

    if($foriegnKeyCheck->isEmpty())
    {
        Theme::destroy($id);
        return redirect()->route('theme.index')->withFlashSuccess('Theme profile is deleted successfully.');
    }else{
        return redirect()->route('theme.index')->withFlashSuccess('Theme profile is deleted successfully.');
    }

}

别忘了导入

use Illuminate\Support\Facades\DB;

在控制器顶部

希望有帮助

如果您在下面遇到任何问题,请