【问题标题】:Laravel Eloquent delete() not workingLaravel Eloquent delete()不起作用
【发布时间】:2018-01-21 09:02:18
【问题描述】:

文档说:

$user = User::find($user_id);

$user->delete();

这不起作用,但是 ProductColor::find($color_id) 工作。 $color->delete() 不返回任何内容,DELETE FROM 查询甚至不执行(如调试栏中所示)。

但我可以删除记录:

ProductColor::destroy($color_id);

一定是我之前忽略的东西,我是 Laravel 的新手。

我也在使用商店,它按预期工作

public function store(Request $request)
    {
        $color = new ProductColor();
        $color->name = $request->color_name;
        $color->order = $request->color_order;
        $saved = $color->save();

        if ($saved) {
            return back()->with('message:success', 'Ok');
        } else {
            return back()->with('message:error', 'Error');
        }

    }

总结一下

这个作品

public function destroy($color_id)
    {
        $deleted = ProductColor::destroy($color_id);

        if ($deleted) {
            return back()->with('message:success', 'Deleted');
        } else {
            return back()->with('message:error', 'Error');
        }
    }

这不是

public function destroy($color_id)
{
  $color = ProductColor::find($color_id);

  $color->delete();
}

我的模特

<?php

namespace Modules\Shop\Entities;

use Illuminate\Database\Eloquent\Model;
use Modules\Languages\Entities\Language;

class ProductColor extends Model
{
    protected $fillable = [];
    protected $table = 'product_colors';
}

【问题讨论】:

  • 真的我不知道为什么这不起作用。但是你为什么不试试查询呢? $user = User::where('user_id', $user_id)-&gt;delete();
  • 我的 IDE 显示 'where' 不是静态方法,所以我只使用了 User::destroy($user_id);
  • 尝试使用delete()时出现什么错误?
  • 正如我所说,没有错误,没有什么只是没有执行。

标签: php laravel laravel-5 eloquent laravel-eloquent


【解决方案1】:
 DB::table('pykcodes')
                ->where('user_id', $user_id)
                ->delete();

这无需使用模型即可直接工作。 只要确保您从顶部调用use DB;

【讨论】:

    【解决方案2】:

    如果您添加了软删除选项,请检查您的模型类,这样您的记录将不会从数据库中删除。

    【讨论】:

      【解决方案3】:

      抱歉,我发现了问题所在。发布这个问题是我的错误。

      我想做什么:

      $color = new ProductColor();
      $color->find($color_id);
      $color->delete();
      

      应该是:

      $color = ProductColor::find( $color_id );
      $color->delete();
      

      我的问题是我害怕 IDE 抱怨使用非静态方法 'find'

      【讨论】:

      • 第一个例子很好,但你必须分配 find() 的返回值,因为它返回一个新模型,它不只是将属性附加到现有模型。跨度>
      【解决方案4】:

      您必须在用户模型中添加 SoftDeletes:

      ...

      使用 Illuminate\Database\Eloquent\SoftDeletes;

      类用户扩展可验证 {

      使用软删除;

      受保护的 $dates = ['deleted_at'];

      ...

      【讨论】:

      • 只有当您添加了 deleted_at 列并想要软删除时才会这样。如果您真的想删除该行,这将是一个糟糕的解决方案。
      • 正确,仅适用于您的 users 表中已删除_at 列。请参阅laravel.com/docs/5.7/eloquent 添加软删除
      【解决方案5】:

      你的代码很好 - the docs show exactly 你在做什么。

      如果没有错误,并且颜色没有按预期删除,那么$color_id 没有按预期传递。尝试使用findOrFail,或添加一些其他检查以确保您找到了预期的模型。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-12-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-09
        • 1970-01-01
        • 1970-01-01
        • 2014-09-21
        相关资源
        最近更新 更多