Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 06.05.2016 15:38:17

TrueKanonir
Откуда: Ташкент
Сообщений: 221

Не получается записать данные в таблицу, и вернуть масив айдшников

Добрый день.
Есть две модели: 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)

Не в сети

#2 08.05.2016 14:59:47

TrueKanonir
Откуда: Ташкент
Сообщений: 221

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

Решение найдено.
Все делаю через 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 .' успешно добавлен');
    }

Не в сети

Подвал раздела