добавление данных в таблицу показывает ошибку при добавлении отношений - PullRequest
0 голосов
/ 13 мая 2019

Я новичок в laravel. Я установил отношения один ко многим между таблицей отца и таблицей одиннадцати, после чего, когда я пытаюсь добавить нового ученика, он показывает эту ошибку

SQLSTATE [HY000]: общая ошибка: 1364 Поле 'Father_id' не имеет значения по умолчанию (SQL: вставить в eleves (nom, prenom, adresse, date_naiss, sexe, nationnalite, niveau_scolaire, updated_at, created_at) значения (mohamed, ferchichi, tunis, 2018-07-22, Un garçon, tunisen, 1, 2019-05-13 10:56:28, 2019-05-13 10:56:28))

как я могу исправить эту проблему, мне нужна ваша помощь

это таблица из одиннадцати

public function up()
{
    Schema::create('eleves', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->unsignedBigInteger('father_id');
        $table->string('nom');
        $table->string('prenom');
        $table->date('date_naiss');
        $table->string('sexe');
        $table->string('nationnalite');
        $table->string('niveau_scolaire');
        $table->string('adresse');
        $table->foreign('father_id')->references('id')->on('fathers')->onDelete('cascade')->onUpdate('cascade');
        $table->timestamps();
    });
}

модель одиннадцати

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Eleve extends Model
{
    protected $fillable = ['nom', 'father_id', 'prenom', 'date_naiss', 'sexe', 'nationnalite', 'niveau_scolaire', 'adresse'];

    public function father()
    {
        return $this->belongsTo('App\Father');
    }
}

модель отца

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Father extends Model
{

    protected $fillable = ['nom', 'prenom', 'adresse', 'num_tel', 'email', 'login', 'date_naissance ', 'password'];

    public function user()
    {
        return $this->belongsTo(User::class);
    }


    public function eleve()
    {
        return $this->hasMany('App\Eleve');
    }


и клинок одиннадцати

<section id="no-more-tables">
    <table class="table table-bordered table-striped table-condensed cf">
        <thead class="cf">
            <tr>
                <th>id-eleve</th>
                <th>Nom</th>
                <th>Prenom</th>
                <th>Adresse</th>
                <th>Age</th>
                <th>Sexe</th>
                <th>Nationnalité</th>

                <th>Niveau scolaire </th>
                <th>les actions</th>
            </tr>
        </thead>
        <tbody>
            @foreach($eleves as $eleve)
            <tr>

                <td class="numeric" data-title="id-parent">{{$eleve->id}}</td>
                <td class="numeric" data-title="Nom">{{$eleve->nom}}</td>
                <td class="numeric" data-title="Prenom">{{$eleve->prenom}}</td>
                <td class="numeric" data-title="Adresse">{{$eleve->adresse}}</td>
                <td class="numeric" data-title="Numéro telephone">{{$eleve->date_naiss}}</td>
                <td class="numeric" data-title="Email">{{$eleve->sexe}}</td>
                <td class="numeric" data-title="Login">{{$eleve->nationnalite}}</td>
                <td class="numeric" data-title="Password">{{$eleve->niveau_scolaire}}</td>
                <td>
                    <button href="#editEmployeeModal" class="btn btn-theme" data-target="#editEmployeeModal "
                        data-mytitle="{{$eleve->nom}}" data-myprenom="{{$eleve->prenom}}"
                        data-myadresse="{{$eleve->adresse}}" data-myage="{{$eleve->date_naiss}}"
                        data-mysexe="{{$eleve->sexe}}" data-mynationalite="{{$eleve->nationnalite}}"
                        data-myniveau="{{$eleve->niveau_scolaire}}" data-catid={{$eleve->id}} class="edit"
                        data-toggle="modal"><i class="material-icons" data-toggle="tooltip" title="Edit">&#xE254;</i>
                    </button>
                    <button href="#deleteEmployeeModal" class="btn btn-theme" data-target="#deleteEmployeeModal"
                        data-catid={{$eleve->id}} class="delete" data-toggle="modal"> <i class="material-icons"
                            data-toggle="tooltip" title="Delete">&#xE872;</i> </button>
                </td>

            </tr>
        </tbody>
        @endforeach
    </table>
    <div class="text-center">
        {{ $eleves->links() }}
    </div>
    <div class="clearfix">

        <div class="hint-text">Affichage de <b>5</b> sur <b>25</b> entrées</div>

        <div id="addEmployeeModal" href="create" class="modal fade">
            <div class="modal-dialog">
                <div class="modal-content">
                    <form action="{{route('eleves.store')}}" method="post">
                        {{csrf_field()}}
                        <div class="modal-header">
                            <h4 class="modal-title">Ajouter un éléve</h4>
                            <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
                        </div>
                        <div class="modal-body">
                            <div class="form-group">
                                <label>nom</label>
                                <input type="text" id="nom" name="nom" class="form-control" required>
                            </div>
                            <div class="form-group">
                                <label>prenom</label>
                                <input type="text" id="prenom" name="prenom" class="form-control" required>
                            </div>
                            <div class="form-group">
                                <label>adresse</label>
                                <textarea name="adresse" id="adresse" class="form-control" required></textarea>
                            </div>
                            <div class="form-group">

                                <label for="start">Date Naissance</label>

                                <input type="date" id="date_naiss" name="date_naiss" value="2018-07-22" min="2018-01-01"
                                    max="2030-12-31">
                                <!-- <label>Date Naissance</label>


      <input type="text"  name=" date_naiss" id="date_naiss" class="form-control" required>
    </div>  -->
                            </div>
                            <div class="form-group">
                                <div>
                                    <input type="radio" id="sexe" name="sexe" value="une fille" checked>
                                    <label for="sexe">une fille</label>
                                </div>

                                <div>
                                    <input type="radio" id="sexe" name="sexe" value="Un garçon">
                                    <label for="sexe">Un garçon</label>
                                </div>

                            </div>

                            <div class="form-group">
                                <label>Nationnalité</label>
                                <input type="text" name="nationnalite" id="nationnalite" class="form-control" required>
                            </div>
                            <div class="form-group">
                                <label>Niveau Scolaire</label>
                                <input type="text" name="niveau_scolaire" id="niveau_scolaire" class="form-control"
                                    required>
                            </div>

                        </div>

                        <div class="modal-footer">
                            <input type="button" class="btn btn-default" data-dismiss="modal" value="Annuler">
                            <input type="submit" class="btn btn-success" value="Ajouter">
                        </div>
                    </form>
                </div>
            </div>
        </div>
    </div>
</section>

контролер студента

namespace App \ Http \ Controllers;

use Illuminate \ Http \ Request; использовать приложение \ Eleve;

класс EleveController расширяет возможности контроллера {

public function index()
    {
         $eleves = Eleve::paginate(5);
        return view('admin.eleves',compact('eleves'));
    }






 public function store(Request $request)
    {
        Eleve::create($request->all());
        session()->flash('success',' Cet nouvel éléve a été enregistré avec succés');
           return redirect()->back();
    }




 public function update(Request $request, $id)
    {
        $eleve = Eleve::findOrFail($request->eleve_id);
        $eleve->update($request->all());
        session()->flash('success','Cet éléve a été modifié avec succés'); 
       return redirect()->back();
    }




 public function destroy(Request $request)
    {
        $eleve = Eleve::findOrFail($request->eleve_id);
         $eleve->delete();
         session()->flash('success','Cet éleve a été supprimé avec succés');
         return redirect()->back();
    }

}

Ответы [ 2 ]

0 голосов
/ 13 мая 2019

в EleveController я добавляю use App \ Father;и я добавляю эту функцию

 public function create()
{ 
    $fathers= Father::all();
     return view('admin.eleves',compact('fathers'));

}



and in the eleve blade.php i add this 



<select name="father_id">
        @foreach($fathers as $father)
            <option name="{{ $father->id }}">{{ $father->nom }}</option>
        @endforeach
    </select>

проблема в том, что показывает мне ту же ошибку "Неопределенная переменная: отцы"

0 голосов
/ 13 мая 2019

Поле father_id в таблице eleves является обязательным.Вы должны либо сделать его необязательным, либо, что более вероятно, добавить его в форму.

Чтобы сделать поле необязательным, замените эту строку

$table->unsignedBigInteger('father_id');

на

$table->unsignedBigInteger('father_id')->nullable();

Чтобы добавить его в форму, вы, вероятно, использовали бы <select>, что-то вроде:

<form ...>
    <select name="father_id">
        @foreach(\App\Father::all() as $father)
            <option name="{{ $father->id }}">{{ $father->nom }}</option>
        @endforeach
    </select>

Примечание: Неправильно вызывать базу данных внутри файла представления.Лучшим подходом было бы загрузить Father s внутри контроллера и передать его в представление:

public function create()
{
    $fathers = Father::all();
    return view('...', ['fathers' => $fathers]);
}

и в представлении:

<form ...>
    <select name="father_id">
        @foreach($fathers as $father)
            <option name="{{ $father->id }}">{{ $father->nom }}</option>
        @endforeach
    </select>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...