Ошибка преобразования массива в строку при вставке данных в БД - PullRequest
1 голос
/ 19 сентября 2019

Я использую Vue Multiselect.Я хочу сохранить идентификатор выбранных опций в БД, но, к сожалению, я получаю ошибку Преобразование массива в строку .Я помещаю как site_id, так и administrator в fillables. Я получаю массив выбранных опций на стороне контроллера, но я думаю, что проблема в методе вставки, который вызывает ошибку.Надеюсь, вы понимаете мой вопрос.

HTML:

                        <form @submit.prevent="addAllocateSites">
                            <div class="row">
                                <div class="col-md-4">
                                    <div class="form-group">
                                        <label class="typo__label">Select Site</label>
                                        <multiselect v-model="form.selected_sites" :options="options"
                                                     :multiple="true"
                                                     :close-on-select="false"
                                                     :clear-on-select="false" :preserve-search="true"
                                                     placeholder="Pick Site"
                                                     name = "selected_sites"
                                                     label="asset_name" track-by="asset_name"
                                                     :class="{ 'is-invalid': form.errors.has('selected_sites') }">
                                            <template slot="selection" slot-scope="{ values, search, isOpen }"><span
                                                class="multiselect__single" v-if="values.length &amp;&amp; !isOpen">{{ values.length }} Sites selected</span>
                                            </template>
                                        </multiselect>
                                        <pre class="language-json"><code>{{form.selected_sites}}
Сохранить

Сценарий:


<script>

    import Multiselect from 'vue-multiselect';
    import Form from 'vform';


    export default {

        components: {
            Multiselect
        },
        data() {
            return {

                form: new Form({
                    selected_sites: [],
                }),
                options: []
            }
        },
        methods: {
            getSites() {
                axios.get('api/sites').then(data => {
                    this.options = data.data;
                    console.log(data.data)
                }, function (data) {
                    console.log(data)
                });
            },
            addAllocateSites(){

                this.form.post('api/allocate_sites').then(() => {

                    toast.fire({
                        type: 'success',
                        title: 'Sites Allocated Successfully'
                    });
                });

            }
        },
        mounted() {
            this.getSites();
            console.log('Component mounted.')
        }
    }
</script>

Контроллер:

    public function store(Request $request)
    {
        $siteIds = $request->input('selected_sites');

//        dd($siteIds);

        $validation = Validator::make($request->all(), [
            'selected_sites' => 'required|array',
        ]);

        if ($validation->fails()) {
            return ['Fields required'];
        } else {

            for ($i = 1; $i < count($siteIds); $i++) {

                $sites[] = [

                    "site_id" => $siteIds[$i],
                    "administrator_id" => Auth::user()->id,
                ];
            }

            $insertData = AllocateSites::insert($sites);

            if ($insertData) {
                return ['Sites Allocated'];
            } else {
                return ['Failed to add data'];
            }
        }
    }


1 Ответ

1 голос
/ 19 сентября 2019

Я получил решение

for ($i = 0; $i < count($siteIds); $i++) {

         $sites[] = [
            "site_id" => $siteIds[$i]['id'],
            "administrator_id" => Auth::user()->id,
             ];
   }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...