web-dev-qa-db-ja.com

laravel Eloquent ORM delete()メソッド

こんにちはlaravelを勉強しています。 Eloquent ORMのdeleteメソッドを使用していますが、異なる結果が得られます。trueまたはfalseではなく、nullです。リソースルートを設定し、UsersControllerにdestroyメソッドがあります。

public function destroy($id){

  $res=User::find($id)->delete();
  if ($res){
    $data=[
    'status'=>'1',
    'msg'=>'success'
  ];
  }else{
    $data=[
    'status'=>'0',
    'msg'=>'fail'
  ];
  return response()->json($data);

しかし、常に応答{"status": "0"、 "msg": "failed"}が返され、データベース内のレコードは削除されます。

次にdd($ res)を使用します。ページにnullが表示されます。

しかし、私はそれがブール値trueまたはfalseを返すことを学ぶコースから。

コードにエラーはありますか?

データベースからデータを削除するときにブール値の結果を取得できる他の方法を教えてもらえますか?

24
Evol Rof

クエリを変更して、次のように試すことができると思います:

$res=User::where('id',$id)->delete();

最初は、

destroy()はオブジェクトまたはモデルを介して直接エンティティを削除するための正しいメソッドであり、delete()はクエリビルダーでのみ呼び出すことができることを知っておく必要があります。

あなたの場合、レコードがデータベースに存在するかどうかを確認していません。レコードは存在する場合にのみ削除できます。

だから、あなたは次のようにそれを行うことができます。

$user = User::find($id);
    if($user){
        $destroy = User::destroy(2);
    }

上記の値または$destroyは、失敗または成功した場合にそれぞれ0または1になります。したがって、次のように$data配列を変更できます。

if ($destroy){

    $data=[
        'status'=>'1',
        'msg'=>'success'
    ];

}else{

    $data=[
        'status'=>'0',
        'msg'=>'fail'
    ];

}

理解していただければ幸いです。

8
Sagar Gautam

LaravelEloquentは、boolean値を返すdestroy()関数を提供します。そのため、データベースにレコードが存在しdeletedを取得した場合、 trueそれ以外の場合false

Laravel Tinker Shellを使用した例を次に示します。

delete operation result

この場合、コードは次のようになります。

public function destroy($id)
    {
        $res = User::destroy($id);
        if ($res) {
            return response()->json([
                'status' => '1',
                'msg' => 'success'
            ]);
        } else {
            return response()->json([
                'status' => '0',
                'msg' => 'fail'
            ]);
        }
    }

Laravel Eloquent Delete Models に関する詳細情報

0