1
votes

Illuminate \ Database \ QueryException (23000) SQLSTATE [23000]: Violation de contrainte d'intégrité: 1048 La colonne «first_name» ne peut pas être nulle

Je suis assez nouveau dans laravel et je rencontre ce problème en essayant de saisir des valeurs dans ma base de données. cette même chose fonctionne pour la table et la forme des patients, mais pas pour les médecins. si quelqu'un pouvait indiquer où je vais mal, ce serait vraiment apprécié

le tableau,

<?php

namespace App\Http\Controllers;

use App\Model\Department;
use App\Model\Designation;
use App\Model\Doctor;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Image;
class DoctorRegister extends Controller
{

    /**
     * @var Doctor
     */
    public $doctor;
    /**
     * @var Department
     */
    public $department;
    /**
     * @var Designation
     */
    public $designation;

    public function __construct(Doctor $doctor,Department $department,Designation $designation)
    {
        $this->doctor = $doctor;
        $this->department = $department;
        $this->designation = $designation;
    }

    public function index(){
        return view('auth.doctor-reg');
    }
    public function create(){
    }
    public function store(Request $request){

     $doctor =new $this->doctor;
     $doctor->first_name = $request->input('fname');
     $doctor->last_name = $request->input('lname');
     $doctor->username = $request->input('username');
     $doctor->password = bcrypt($request->input('password'));
     $doctor->phone = $request->input('phone');
     $doctor->email = $request->input('email');
     $doctor->designations = $request->input('designation');
     $doctor->departments = $request->input('department');
     $doctor->address = $request->input('address');
     $doctor->education = $request->input('education');
     $doctor->specialist = $request->input('specialist');
     $doctor->dob = $request->input('dob');
     $doctor->blood_group = $request->input('blood_group');
     $doctor->sex = $request->input('sex');
     $doctor->plan = $request->input('plan');
     $doctor->cabin = $request->input('cabin');
     $doctor->time = $request->input('time');
     $doctor->day = $request->input('day');
     $doctor->transaction_id = 1;
        if($request->hasFile('nid_file')){
            $nid_file_name = 'nid_'.time().'.pdf';
            $nid_file = $request->file('nid_file');
            $nid_file->move('assets/images/doctor/nid_file',$nid_file_name);
            $doctor->nid_file = $nid_file_name;
        }
        if($request->hasFile('cv_file')){
            $cv_file_name = 'cv_'.time().'.pdf';
            $cv_file = $request->file('cv_file');
            $cv_file->move('assets/images/doctor/cv_file',$cv_file_name);

            $doctor->cv_file = $cv_file_name;
        }
        if($request->hasFile('picture'))
        {
            $picture_path = 'assets/images/doctor/picture/pic_'.time().'.jpg';
            Image::make($request->picture)->resize(200, 200)->save($picture_path);
        }
     $doctor->nid_file = $request->nid_file;
     $doctor->cv_file = $request->cv_file;
     $doctor->picture = $request->picture;
     $doctor->status = $request->status;
     $doctor->save();
     return redirect('/login')->with('success','Doctor has been save successful');
    }

    public function edit($id){
        $doctor =$this->doctor->findOrFail($id);
        $departments = $this->department->orderBy('name')->get();
        $designations = $this->designation->orderBy('name')->get();
        return view('admin.doctor.edit',compact('doctor','departments','designations'));
    }
    public function update(Request $request,$id){

        $this->validate($request,[
            'first_name'=>'required',
            'last_name'=>'required',
            'username'=>'required|unique:doctors,username,'.$id,
            'phone'=>'required',
            'email'=>'required|email',
            'designation'=>'required',
            'department'=>'required',
            'nid_file'=>'mimes:pdf|max:2048',
            'cv_file'=>'mimes:pdf|max:2048',
            'picture'=>'mimes:jpg|max:2048',

        ]);
        $doctor =$this->doctor->findOrFail($id);
        $doctor->first_name = $request->first_name;
        $doctor->last_name = $request->last_name;
        $doctor->username = $request->username;
        $doctor->password = bcrypt($request->password);
        $doctor->phone = $request->phone;
        $doctor->email = $request->email;
        $doctor->designation_id = $request->designation;
        $doctor->department_id = $request->department;
        $doctor->address = $request->address;
        $doctor->education = $request->education;
        $doctor->specialist = $request->specialist;
        $doctor->dob = $request->dob;
        $doctor->blood_group = $request->blood_group;
        $doctor->sex = $request->sex;
        if($request->hasFile('nid_file')){
            @unlink('assets/images/doctor/nid_file/'.$request->nid_file);
            $nid_file_name = 'nid_'.time().'.pdf';
            $nid_file = $request->file('nid_file');
            $nid_file->move('assets/images/doctor/nid_file',$nid_file_name);

            $doctor->nid_file = $nid_file_name;
        }
        if($request->hasFile('cv_file')){
            @unlink('assets/images/doctor/cv_file/'.$request->cv_file);
            $cv_file_name = 'cv_'.time().'.pdf';
            $cv_file = $request->file('cv_file');
            $cv_file->move('assets/images/doctor/cv_file',$cv_file_name);

            $doctor->cv_file = $cv_file_name;
        }
        if($request->hasFile('picture'))
        {
            @unlink('assets/images/doctor/picture/'.$request->picture);
            $picture_name = 'pic_'.time().'.jpg';
            $picture_path = 'assets/images/doctor/picture/'.$picture_name;
            Image::make($request->file('picture'))->resize(200, 200)->save($picture_path);
            $doctor->picture = $picture_name;
        }



        $doctor->status = $request->status;
        $doctor->save();
        return redirect()->to(route('admin.doctor'))->with('success','Data has been updated');

    }
    public function view($id){
        $doctor =$this->doctor->findOrFail($id);
        return view('admin.doctor.view',compact('doctor'));
    }
}

la vue à travers laquelle je veux entrer des valeurs,

XXX

je m'excuse pour l'énorme code mais je n'ai pas été en mesure de résoudre ce problème après de nombreuses tentatives et j'espère donner un meilleur contexte de cette façon.

le contrôleur, p >

<div class="card card-tsk mb-4">
    <div class="card-body">
        <form action="{{route('doctor-reg.store')}}" method="post" enctype="multipart/form-data">@csrf
            <div class="form-row">
                <div class="form-group col-md-3">
                    <label for="first_name">First Name <span class="text-danger">*</span></label>
                    <input type="text" class="form-control" id="first_name" name="first_name" placeholder="First Name">
                </div>
                <div class="form-group col-md-3">
                    <label for="last_name">Last Name <span class="text-danger">*</span></label>
                    <input type="text" class="form-control" id="last_name" name="last_name" placeholder="Last Name">
                </div>
                <div class="form-group col-md-3">
                    <label for="username">Username</label>
                    <input type="text" class="form-control" id="username" name="username" placeholder="Username">
                </div>
                <div class="form-group col-md-3">
                    <label for="password">Password</label>
                    <input type="password" class="form-control" id="password" name="password" placeholder="Password">
                </div>
            </div>
            <div class="form-row">
                <div class="form-group col-md-3">
                    <label for="phone">Phone No</label>
                    <input type="text" class="form-control" id="phone" name="phone" placeholder="Phone No">
                </div>
                <div class="form-group col-md-3">
                    <label for="email">Email Address</label>
                    <input type="email" class="form-control" id="email" name="email" placeholder="Email Address">
                </div>
                <div class="form-group col-md-3">
                    {{-- <label for="designation">Designation</label>
                    <select name="designation" id="designation" class="form-control select2">
                        <option value="">Select Designation</option>
                        @foreach($designations as $designation)
                            <option value="{{$designation->id}}">{{$designation->name}}</option>
                        @endforeach
                    </select> --}}
                </div>
                <div class="form-group col-md-3">
                    {{-- <label for="department">Department</label>
                    <select name="department" id="department" class="form-control select2">
                        <option value="">Select Department</option>
                        @foreach($departments as $department)
                        <option value="{{$department->id}}">{{$department->name}}</option>
                            @endforeach
                    </select> --}}
                </div>
            </div>
            <div class="form-row">
                <div class="form-group col-md-6">
                    <label for="address">Address</label>
                    <textarea class="form-control" rows="8" name="address" id="address"></textarea>
                </div>
                <div class="form-group col-md-6">
                    <label for="Education">Education/Degree</label>
                    <textarea class="form-control" name="education" rows="6" id="Education" ></textarea>
                </div>
            </div>
            <div class="form-row">
                <div class="form-group col-md-4">
                    <label for="specialist">Specialist</label>
                    <input type="text" class="form-control" id="specialist" name="specialist" placeholder="Specialist">
                </div>
                <div class="form-group col-md-4">
                    <label for="dob">Date fo Birth</label>
                    <input  class="form-control datepicker" id="dob"  name="dob" value="{{date('Y/m/d')}}" >
                </div>
                <div class="form-group col-md-4">
                    <label for="blood_group">Blood Group</label>
                    <select name="blood_group" id="blood_group" class="form-control select2">
                    <option value="">None</option>
                    <option value="A+">A+</option>
                    <option value="A-">A-</option>
                    <option value="B+">B+</option>
                    <option value="B-">B-</option>
                    <option value="AB+">AB+</option>
                    <option value="AB-">AB-</option>
                    <option value="O-">O-</option>
                    <option value="O+">O+</option>
                    </select>
                </div>
            </div>
            <div class="form-group row">
                <label for="inputAddress2"  class="col-sm-2">Sex</label>
                <div class="col-sm-2">
                    <div class="form-check form-check-inline">
                        <input class="form-check-input" type="radio" name="sex" id="sex1" checked value="M">
                        <label class="form-check-label" for="sex1">Male</label>
                    </div>
                    <div class="form-check form-check-inline">
                        <input class="form-check-input" type="radio" name="sex" id="sex2" value="F">
                        <label class="form-check-label" for="sex2">Female</label>
                    </div>
                </div>


            </div>
            <div class="form-row">
                <div class="form-group col-md-4">
                    <label for="nid_file">Upload NID <span class="help-block">(eg:pdf) </span></label>
                    <input type="file" class="form-control" id="nid_file" name="nid_file">
                </div>
                <div class="form-group col-md-4">
                    <label for="cv_file">Upload Biography <span class="help-block">(eg:pdf) </span></label>
                    <input type="file" class="form-control" id="cv_file" name="cv_file">
                </div>
                <div class="form-group col-md-4">
                    <label for="picture">Picture <span class="help-block">(eg:jpg) </span></label>
                    <input type="file" class="form-control" id="picture" name="picture">
                </div>
            </div>

            <div class="form-group row">
                <label for="inputAddress2"  class="col-sm-2">Status</label>
                <div class="col-sm-2">
                    <div class="form-check form-check-inline">
                        <input class="form-check-input" type="radio" name="status" id="status1" checked value="1">
                        <label class="form-check-label" for="status1">Active</label>
                    </div>
                    <div class="form-check form-check-inline">
                        <input class="form-check-input" type="radio" name="status" id="status2" value="0">
                        <label class="form-check-label" for="status2">Inactive</label>
                    </div>
                </div>


            </div>
            <button type="reset" class="btn btn-outline-tsk"><i class="fa fa-refresh"></i> Reset</button>
            <button type="submit" class="btn btn-tsk"><i class="fa fa-save"></i> Save</button>
        </form>

    </div>
</div>

Mise à jour: cela fonctionne, merci à tous ceux qui ont parcouru ce gros message et y ont répondu.


9 commentaires

Salut, Rohan, veuillez ajouter nullable () à la fin de cette ligne ($ table-> string ('first_name');) si vous voulez passer un prénom nul.


où est classé first_name ? dans votre forme?


pouvez-vous montrer votre contrôleur? et modèle?


@Hamelraj c'est dans le deuxième bloc de code.


@NiketJoshi je ne veux pas passer un nullable et c'est pourquoi j'ai ce problème


Ensuite, veuillez me montrer le code du contrôleur ou vous devez le valider soit depuis le backend, soit depuis le front-end


dans votre fonction de sauvegarde, vérifiez dd ($ request-> all ()). vérifier que vous obtenez la valeur first_name? sinon ok montrez-moi votre fonction d'enregistrement de code?


@codeformoney vient de mettre à jour et de mettre en place le code du contrôleur


votre nom d'entrée est first_name mais vous appelez fname à votre demande


5 Réponses :


0
votes

L'exception Illuminate \ Database \ QueryException (23000) SQLSTATE [23000]: Violation de la contrainte d'intégrité: 1048 La colonne 'first_name' ne peut pas être nulle lui-même indique l'erreur, la colonne first_name ne peut pas être nulle. Vous devez soit définir la colonne first_name nullable ou Vous devez insérer des données. Vérifiez votre formulaire, soumet-il les données correctement ou non, puis vérifiez le contrôleur à partir duquel vous insérez les données.

utilisez Validator dans le contrôleur avant d'enregistrer les données. Voici l'exemple,

if($validation->fails()){
    //Validation failed
}else{
    //Success, process the request data
}

alors vous pouvez vérifier votre demande par rapport au validateur comme

$validator = Validator::make($request->input() , [
    'first_name' => 'required',
    'last_name' => 'required',
     ........
])


0 commentaires

1
votes

Vous obtenez cette erreur car lors de la migration, la colonne first_name n'est pas nullable. Cela signifie que vous devez donner une valeur à cette colonne.

Il est recommandé de rendre ces champs obligatoires dans votre formulaire, de sorte que l'utilisateur doit les remplir. De plus, vous pouvez utiliser la validation côté serveur pour vérifier la demande publiée.


0 commentaires

1
votes
$doctor->last_name = $request->input('last_name');

8 commentaires

merci d'avoir répondu. qui a aidé une partie du problème, maintenant je suis en train d'obtenir un `` plan '' ne peut pas être nul


Je ne vois aucune entrée dans votre formulaire qui porte le nom «plan» ni aucune des colonnes de votre table, vous devez le vérifier à nouveau.


'plan' était présent dans le contrôleur en tant que "$ doctor-> plan = $ request-> input ('plan');" et je l'ai commenté mais j'obtiens l'erreur "Le champ" plan "n'a pas de valeur par défaut"


L'avez-vous ajouté manuellement à la table «médecins»?, Si c'est le cas, vous devez ajouter une entrée nommée «plan» dans votre formulaire pour pouvoir le soumettre au contrôleur, puis vous pouvez le stocker dans votre table.


Par exemple:


Non, c'était en fait un modèle sur lequel un collègue travaillait avant moi et j'ai commencé à travailler sur ce projet à mi-chemin après son départ. Je vais essayer d'utiliser l'exemple et poster en retour. Merci pour l'aide!


Je viens de l'essayer et cela a fonctionné. Merci beaucoup pour toute l'aide!


N'oubliez pas de supprimer le commentaire de la ligne d'affectation dans votre contrôleur $ doctor-> plan = $ request-> input ('plan');



0
votes

si vous voyez que le nom de input last_name est last_name dans votre formulaire

tandis que dans votre contrôleur vous recherchez $ request-> input ('lname'); qui est faux

soit changez ceci

<input type="text" class="form-control" id="last_name" name="lname" placeholder="Last Name">

en

<input type="text" class="form-control" id="last_name" name="last_name" placeholder="Last Name">

ou dans votre contrôleur, vous pouvez le faire au lieu de $ request-> input ('lname'); vous pouvez simplement utiliser $ request-> input ('last_name'); et il en va de même pour firstname

Merci


2 commentaires

oui j'ai corrigé cela mais maintenant je reçois le 'plan' ne peut pas être nul


@RohanKorde je ne peux pas voir le plan d'entrée dans votre formulaire,



0
votes

$ request-> input ('first_name'); Ou $ request-> first_name;


0 commentaires