web-dev-qa-db-ja.com

Laravel Eloquent delete()が機能しない

ドキュメントによると:

$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';
}
5
RomkaLTU

申し訳ありませんが、問題がわかりました。この質問を投稿する私の間違い。

私がやろうとしたこと:

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

する必要があります:

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

私の問題は、IDE非静的メソッド 'find'の使用について不平を言うことを恐れていたということでした

5
RomkaLTU

あなたのコードは大丈夫です- ドキュメントは正確に示しています あなたがしていること。

エラーがなく、期待どおりに色が削除されない場合は、$color_idが期待どおりに渡されていません。 findOrFail を使用するか、期待されるモデルが見つかったことを確認する他のチェックを追加してみてください。

1
Don't Panic