Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Добрый день.
Есть две модели: Car и Specification.
Связаны many to many
// Car
/**
* Car specifications
*
* @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
*/
public function specification()
{
return $this->belongsToMany(
'App\Specification',
'car_specification',
'car_id',
'specification_id'
);
}
// Specification
/**
* Specification
*
* @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
*/
public function car()
{
return $this->belongsToMany(
'App\Car',
'car_specification',
'specification_id',
'car_id'
);
}
В CarController пытаюсь сначало занести данные в таблицу specifications
public function store(CarRequest $request)
{
$car = new Car();
// ...
$car->save();
$specifications = Specification::create([
'name[]' => $request->input('spec_name'),
'value[]' => $request->input('spec_value'),
]);
$car->specification()->attach($specifications->id);
return redirect('admin/cars')
->with('text','Автомобиль '.$car->name .' успешно добавлен');
}
Спецификации добавляются,но только одна запись, хотя я клонирую эллемент. и в пивотной таблице car_specification тоже 1 запись.
Как решить проблему?
Изменено TrueKanonir (06.05.2016 15:41:43)
Не в сети
Решение найдено.
Все делаю через ajax
// create.blade.php
<table class="table table-condensed">
<thead id="spec">
<tr>
<th>Характеристика</th>
<th>Значение</th>
<th></th>
</tr>
</thead>
<tbody id="spec-cont">
<tr>
<td>{!! Form::input('text','spec_name',null,['class' => 'form-control','id' => 'spec_name']) !!}</td>
<td>{!! Form::input('text','spec_value',null,['class' => 'form-control','id' => 'spec_value']) !!}</td>
<td><button id="save" type="button" class="btn btn-success">добавить</button></td>
</tr>
</tbody>
</table>
<label for="specifications">Характеристики</label>
<select class="form-control" multiple="multiple" id="results" name="specifications[]" style="height: 400px;">
</select>
@section('scripts')
<script>
$('#save').click(function() {
$.ajax({
type: "post",
url: "{{ url('admin/api/specifications/save') }}",
headers: {
'X-CSRF-TOKEN': $('meta[name="_token"]').attr('content')
},
data: {
spec_name: $('#spec_name').val(),
spec_value: $('#spec_value').val()
},
success: function(data) {
$('#results').append($('<option>', {value: data[0], text: data[1]+' '+ data[2]}));
$('#spec-cont').find('input[type=text]').val('');
},
error: function(xhr, str){
alert('Возникла ошибка! Попробуйте заного');
}
});
});
</script>
// ApiSpecificationController
/**
* Save specifications to db
*
* @param SpecificationRequest $request
* @return array
*/
public function store(SpecificationRequest $request)
{
$spec = new Specification();
$spec->spec_name = $request->input('spec_name');
$spec->spec_value = $request->input('spec_value');
$spec->save();
return [$spec->id,$spec->spec_name,$spec->spec_value];
}
Данные возвращаются в <select>, а потом уже в CarController в методе store аттачим.
public function store(CarRequest $request)
{
$car = new Car();
// ...
$car->save();
$car->specification()->attach($request->input('specifications'));
return redirect('admin/cars')
->with('text','Автомобиль '.$car->name .' успешно добавлен');
}
Не в сети