如果一个数据表的数据在另一数据表中用作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.');
}
}
如果该控制器数据在另一个控制器中使用,如何应用条件以停止删除该控制器中的数据?
答案 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;
在控制器顶部
希望有帮助
如果您在下面遇到任何问题,请