【问题标题】:Checking data before delete in Laravel在 Laravel 中删除之前检查数据
【发布时间】:2017-11-07 14:12:34
【问题描述】:

我在删除项目中的数据时遇到问题.. 我有两个没有任何关系的表数据库

表单的表格

Schema::create('forms', function (Blueprint $table) {
        $table->increments('id');
        $table->string('FormName', 200);
        $table->string('GroupID', 100)->nullable();
        $table->integer('EditorType');
        $table->integer('LanguageID')->nullable()->default(1);
        $table->integer('PageTemplateID')->nullable();
        $table->integer('GadgetID')->nullable();
        $table->string('Categories', 200)->nullable();
        $table->timestamps();
    });

内容设置表

Schema::create('content_settings', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('language_id');
        $table->integer('gadget_id');
        $table->string('ContentSettingName', 100);
        $table->text('ContentSettingValue');
        $table->timestamps();
    });

控制器

public function destroy($id)
{
    $form = Form::findOrFail($id);
    $pages = Form::where('GroupID', $form->GroupID)->get()->pluck('id')->toArray();
    $homepage = ContentSetting::where('language_id', $form->LanguageID)
                              ->where('gadget_id', $form->GadgetID)
                              ->where('ContentSettingValue', $form->id)
                              ->pluck('ContentSettingValue')->first();
    if(!in_array($homepage, $pages)){
        $deletePages = Form::where('GroupID', $form->GroupID)->delete();
    }

    return response()->json($homepage);
}

当我将数据存储到数据库时,我将直接存储 2 行数据。因为在我的表格中,我有列语言ID,并且2行数据具有相同的GroupID..问题是我想删除数据时。

forms.idcontent_settings.ContentSettingValue 相连。因此,当我存储数据后,我可以选择其中一个数据为default homepage。如果我对默认主页的数据单击删除按钮,则会出现警报('您不能删除默认主页'),但是如果我对不是默认主页的数据单击删除按钮,但它具有相同GroupID 与默认主页。它将删除两行数据(换句话说,默认主页也将被删除)。如果我检查其中一个数据是默认主页而另一个不是默认主页,但它们具有相同的 GroupID,我该如何处理它,我无法删除它们。

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    您可以简单地使用 $id 删除应在参数中提供的行。 据我了解,destroy函数提供了一个id来检查它是否可删除。该功能如果不是默认会删除,如果是默认主页则不会删除。所以干脆用id来删除:

    public function destroy($id)
    {
        $form = Form::findOrFail($id);
        $pages = Form::where('GroupID', $form->GroupID)->get()->pluck('id')->toArray();
        $homepage = ContentSetting::where('language_id', $form->LanguageID)
                              ->where('gadget_id', $form->GadgetID)
                              ->where('ContentSettingValue', $form->id)
                              ->pluck('ContentSettingValue')->first();
        if(!in_array($homepage, $pages)){
            $deletePages = Form::whereId($id)->delete();
        }
    
        return response()->json($homepage);
    }
    

    【讨论】:

    • 我已经尝试过你的方法,但我仍然遇到同样的问题.. 当我删除与默认主页具有相同 groupID 的数据时,它仍然会删除它们。我已经找到答案了,你可以查一下。但是,谢谢你的回答,我很感激;)
    【解决方案2】:

    这是我找到的答案,如果您有最简单的答案或最短的方法。请在此处添加您的答案,它可以帮助其他有同样问题的人;)

    public function destroy($id)
    {
        $form = Form::findOrFail($id);
        $pages = Form::where('GroupID', $form->GroupID)->get()->pluck('id');
        $homepage = ContentSetting::whereIn('ContentSettingValue', $pages)
                                  ->count();
        if($homepage < 1){
            $deletePages = Form::where('GroupID', $form->GroupID)->delete();
        }
    
        return response()->json($homepage);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-18
      • 1970-01-01
      • 2015-12-27
      • 2018-03-12
      • 2012-09-26
      • 1970-01-01
      • 2016-02-10
      • 1970-01-01
      相关资源
      最近更新 更多