es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo usar null o vacío en los controladores de Laravel?

Quiero eliminar una fila de la tabla “likes” si la tabla ya tiene una fila que contenga la combinación del “shop_id” solicitado y “user_id”.
O, crear una nueva fila si no existe.

Sin embargo, este código siempre ejecuta el método de eliminación (devuelve 204) incluso si no hay una fila.

¿Podrías darme algún consejo?

public function store(Request $request)
{
    $liked_id = Like::where('shop_id', $request->shop_id)
        ->where('user_id', $request->user_id)
        ->get('id');
    $liked = Like::find($liked_id);
    if (!empty($liked)) {
        Like::where('shop_id', $request->shop_id)
            ->where('user_id', $request->user_id)->delete();
        return 204;
    } else {
        return Like::create($request->all());
    }
}
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para solucionar este problema, puedes verificar si el array devuelto $liked_id está vacío o no. Si está vacío, puedes crear una nueva fila utilizando el método Like::create(), de lo contrario, puedes eliminar la fila utilizando el método delete(). Aquí está el código actualizado:

    public function store(Request $request)
    {
        $liked_id = Like::where('shop_id', $request->shop_id)
            ->where('user_id', $request->user_id)
            ->pluck('id')
            ->first();
    
        if (!empty($liked_id)) {
            Like::where('id', $liked_id)->delete();
            return response()->json([], 204);
        } else {
            return Like::create($request->all());
        }
    }
    

    Cambios realizados:

    • Se utilizó el método pluck() para obtener solo el valor de la columna id del resultado de la consulta.
    • Se utilizó el método first() para obtener la primera fila coincidente.
    • Se devuelve una respuesta JSON con el código de estado 204 después de eliminar una fila.

Comments are closed.