#php #mysql #laravel #laravel-4
#php #mysql #laravel #laravel-4
Вопрос:
Я пытаюсь вставить несколько моделей в базу данных, но безуспешно… У меня есть форма (лезвие) выглядит следующим образом:
@extends('layouts.properties')
@section('content')
{{ Form::open(['route' => 'properties.store', 'class' => 'uk-form', 'id' => 'properties-form']) }}
@for ($i = 0; $i < Auth::user()->properties_count; $i )
<fieldset class="uk-margin-large-top property-field-{{ $i 1 }}">
{{ Form::select('boro[]', ['Pick Borough', 'Manhattan', 'Bronx', 'Brooklyn', 'Queens', 'Staten Island']) }}
{{ Form::text('house_num[]', Input::old('house_num'), ['class' => 'uk-form-width-small', 'placeholder' => 'House Num']) }}
{{ Form::text('street[]', Input::old('street'), ['placeholder' => 'Street']) }}
</fieldset>
@endfor
{{ Form::submit('Save Properties', ['class' => 'uk-button uk-button-primary']) }}
{{ Form::close() }}
@stop
В контроллере у меня есть: (используется array_filter для очистки неустановленных значений, если пользователь заполнил только 2 свойства)
$boro = array_filter(Input::get('boro'));
$house_num = array_filter(Input::get('house_num'));
$street = array_filter(Input::get('street'));
Теперь я застрял … не могу понять, как перебирать 3 массива и сохранять их в нескольких моделях (строках).
Примечание: В моей пользовательской модели я установил отношение свойств hasMany.
Моя модель свойств выглядит следующим образом: id user_id boro housenum street
Итак, если в массивах у меня есть 2 адреса, мне нужны строки.
Есть идеи?
Комментарии:
1. Я не совсем понимаю вашу проблему. Можете ли вы указать, как выглядит ваша модель и какие данные вы хотите вставить?
2. Я отредактировал исходное сообщение, надеюсь, теперь все ясно…
3. Пожалуйста, будьте БОЛЕЕ конкретны с вашей моделью, сохраненные значения являются каким-то отношением? и без обид, но код немного нечитаемый. Так в чем именно проблема?
4. Я не знаю, насколько более понятным я могу быть…
Ответ №1:
// Get your input values
$boros = Input::get('boro');
$numbers = Input::get('house_num');
$streets = Input::get('street');
// Iterate through the arrays
$models = array();
$total = count($boros);
for( $c=0; $c < $total; $c ) {
$models[] = array('boro' => $boros[$c], 'numbers' => $numbers[$c], 'street' => $streets[$c]);
}
// Insert all the models
DB::table('whatever')->insert($models);
Ответ №2:
$boros = Input::get('boro');
$streets = Input::get('street');
$numbers = Input::get('house_num');
$properties = [];
foreach ($boros as $key => $boro)
{
$properties[] = [
'boro' => $boro,
'street' => $streets[$key],
'housenum' => $numbers[$key],
'user_id' => $userId // probably needed too
]
}
// cleaning (and validation maybe?)
$properties = array_map(function ($property) {
return array_filter($property);
}, $properties);
DB::table('properties')->insert($properties);