1
votes

Mettre à jour tous les champs sauf un champ

public function update(Request $request, $id)
    {
        $house = House::find($id);
        $house->name = $request->name;
        $house->code = $request->code;
        $house->description = $request->description;
        $house->address = $request->address;
        $house->owner_name = $request->owner_name;
        $house->manager_name = $request->manager_name;
        if($house->update()){
            return redirect()->route('houses')
            ->with('alert.status', 'success')
            ->with('alert.message', 'Successfully Updated.');
        }
        else{
            return redirect()->route('houses')
            ->with('alert.status', 'danger')
            ->with('alert.message', 'Try Again.');
        } 
    }
Here i want to update all my fields except code when the code already exists in the database.How can i do that please give some solution.Thank you in advance.

0 commentaires

4 Réponses :


0
votes

Utilisez un if :

public function update(Request $request, $id)
    {
        $house = House::find($id);
        $house->name = $request->name;
        if($house->code == NULL)
        $house->code = $request->code;
        $house->description = $request->description;
        $house->address = $request->address;
        $house->owner_name = $request->owner_name;
        $house->manager_name = $request->manager_name;
        $house->save();
        if($house->update()){
            return redirect()->route('houses')
            ->with('alert.status', 'success')
            ->with('alert.message', 'Successfully Updated.');
        }
        else{
            return redirect()->route('houses')
            ->with('alert.status', 'danger')
            ->with('alert.message', 'Try Again.');
        } 
    }

Vous devez utiliser la méthode save () après avoir effectué toutes ces modifications. p >


0 commentaires

0
votes

faites de cette façon avec la condition ternaire:

public function update(Request $request, $id)
    {
        $house = House::find($id);

         $house->code = !empty($house->code) && $house->code!= NULL ? $house->code : $request->code;

   }


1 commentaires

J'ai déjà écrit du code qui fonctionne parfaitement.Mais le problème est que lorsque je change de code, cela fonctionne, mais si je ne change pas de code, cela crée un problème.Parce que si je ne change pas le code, il obtient sa valeur telle qu'elle existe dans la base de données et fait problem.i donne mon code ci-dessous.Veuillez vérifier si (House :: where ('code', '=', Input :: get ('code')) -> exists ()) {return redirect ('/ houses / edit /'.$house->id) -> with ('alert.status', 'danger') -> with ('alert.message', 'Le code de la maison existe déjà.'); }



6
votes

Vous pouvez utiliser l ' opérateur de fusion nul , disponible dans la version 7 de php.

En bref, vous pouvez le faire:

public function update(Request $request, $id)
{
    $house = House::find($id);

    $house->code = $house->code ?? $request->code;
    $house->save();

}

Si $ house-> code est différent de null, il sera utilisé s'il n'utilise pas $request->code

https://www.tutorialspoint.com/php7/php7_coalescing_operator.htm

p >


0 commentaires

0
votes

Vous pouvez vérifier l'existence du code sur la base de données par Eloquent: Mutators comme ci-dessous sur votre Maison Modèle

class House extends Model
{
    //your codes
    public function setCodeAtrribute($value)
    {
        if ($this->attributes["code"] != null) $this->attributes["code"] = $value
    }
}

Vous pouvez également vérifier ici pour plus d'informations


0 commentaires