Как сохранить данные из формы в экзаменационную таблицу, содержащую внешние ключи в laravel 5?

Привет, я пытаюсь сохранить некоторые данные из формы в экзаменационную таблицу, где у меня есть три внешних ключа, я получаю эти внешние ключи из ввода выбора, подобного этому {!! Form::open(['route' => 'exam.store','files'=>true]) !!}

<div class="form-group">
   {!! Form::label('session','Session :') !!}
</div>
<div class="form-group">
   <select class="form-control" name="session">
       @foreach ($sessions as  $session)
           <option value='{{$session->idsess}}'>{{$session->libellesess}} </option>
       @endforeach
   </select>
</div>
<div class="form-group">

    {!! Form::label('prof','Enseignant :') !!}
</div>

    <div class="form-group">
    <select class="form-control" name="iden">
        @foreach ($users as   $user)
            <option value='{{ $user->getIdattribute()}}'>{{$user->getFullNameAttribute()}} </option>
        @endforeach
    </select>
        </div>

<div class="form-group">

{!! Form::label('date','Date:') !!}
    </div>
<div class="form-group">

    {!! Form::date('date',null,['class'=>'form-control']) !!}
</div>
<div class="form-group">
    {!! Form::label('heuredeb','Heure Début :') !!}
</div>
<div class="form-group">
    {!! Form::text('heuredeb',null,['class'=>'form-control','placeholder'=>'heure:minute']) !!}
</div>
<div class="form-group">
    {!! Form::label('heurefin','Heure Fin :') !!}
</div>

<div class="form-group">
    {!! Form::text('heurefin',null,['class'=>'form-control','placeholder'=>'heure:minute']) !!}
</div>


<div class="form-group">
    {!! Form::label('matiere','Matiere :') !!}
</div>
<div class="form-group">
    <select class="form-control" name="matiere">
        @foreach ($matieres as  $matiere)
            <option value='{{$matiere->idmat}}'>{{$matiere->libellemat}} </option>
        @endforeach
    </select>
</div>

<div class="form-group">
    {!! Form::label('statut','Statut :') !!}
</div>

<div class="form-group">
    {!! Form::text('statut',null,['class'=>'form-control','placeholder'=>'statut']) !!}`
</div>

{!! Form::submit('Ajouter',['class'=>'col-md-12 btn btn-danger'])!!}`
{!! Form::close() !!}`

но я получил следующую ошибку:

SQLSTATE [23000]: нарушение ограничения целостности: 1452 Невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа не работает («gesup». «gs_exam», CONSTRAINT «gs_exam_idsess_foreign» FOREIGN KEY («idsess») ССЫЛКИ «gs_session» («idsess» ') ON DELETE CASCADE ON UPDATE CASCADE) (SQL: вставить в 'gs_exam'() значения ())


person undefined    schedule 30.05.2015    source источник
comment
Это дало вам эту ошибку, потому что в вашем sql-запросе SQL: insert into gs_exam() values ()) нет переданных столбцов, а также нет значений, которые можно вставить.   -  person Saiyan Prince    schedule 30.05.2015
comment
нет, я говорю о том, как я могу вставить данные в таблицу, содержащую внешние ключи, которые у меня есть в моей форме   -  person undefined    schedule 30.05.2015
comment
Его можно вставить через Eloquent Model или с помощью Query Builder   -  person Saiyan Prince    schedule 30.05.2015


Ответы (1)


Я вижу несколько странных вещей в вашем коде.

Если в вашей модели есть функция getIdattribute(), измените ее имя на getIdAttribute() (заглавная А) для удобства, и тогда вы сможете получить доступ к этому атрибуту просто с помощью $user->id. То же самое с $user->getFullNameAttribute(), просто используйте $user->fullName. Это называется средством доступа: http://laravel.com/docs/5.0/eloquent#accessors-and-mutators

Кроме того, если вам нужна помощь с вашим кодом, нам нужно увидеть больше. Вы не показали вызываемую функцию контроллера (хранилище), как вы строите свою модель и как вы ее сохраняете.

В любом случае, назначить внешний ключ должно быть очень просто, это похоже на обычный атрибут:

function yourControllerMethod(Request $request)
{
   $model = new MyModel();
   //assuming matiere_id is the foreign key to the Matiere table
   $model->matiere_id = $request->get('matiere');
   ... more stuff
   $model->save();
}

Вы также можете использовать метод associate, чтобы связать его с имеющейся у вас моделью.

Как настроить отношения между моделями: http://laravel.com/docs/5.0/eloquent#relationships Как сохранить связи: http://laravel.com/docs/5.0/eloquent#inserting-related-models

person hfingler    schedule 30.05.2015