Laravel — Храните данные в отношениях HasMany из формы множественного выбора

Пользователь может выбрать несколько вариантов:

<!-- Select Multiple -->
<div class="form-group">
<label class="col-md-4 control-label" for="bedrooms">Bedrooms</label>
<div class="col-md-4">
<select id="bedrooms" name="bedrooms[]" class="form-control"multiple="multiple">
<option value="1" selected="selected">Studio</option>
<option value="2">1</option>
<option value="3">2</option>
<option value="4">3</option>
<option value="5">4</option>
<option value="6">5</option>
<option value="7">6+</option>
</select>
</div>
</div>

Я хочу хранить эти переменные в таблице — bedroomsна отдельных строках, чтобы я мог включить их в запросы. Каждая спальня будет связана с criteria_id:

Состав

Я пытался использовать такие запросы, как $criteria->bedrooms()->saveMany(Input::get('property_type')); как показано в документации Laravel, но безуспешно — ошибка:

Argument 1 passed to Illuminate\Database\Eloquent\Relations\HasOneOrMany::save()
must be an instance of Illuminate\Database\Eloquent\Model, string given

а также $criteria->bedrooms()->attach(Input::get('property_type')); но это возвращает ошибку: Call to undefined method Illuminate\Database\Query\Builder::attach()

Связь:

Criteria

public function bedrooms()
{
return $this->hasMany('Bedroom');
}

Большое спасибо за вашу помощь.

0

Решение

saveMany будет работать в этом сценарии, вам просто нужно сначала преобразовать входной массив в набор новых моделей. Предполагая, что вы знаете идентификатор критерия, попробуйте это:

    foreach (Input::get('bedrooms') as $bedroom) {
$selected[] = New Bedroom(['bedroom' => $bedroom]);
}
$criteria = Criteria::find($criteria_id)->bedrooms()->saveMany($selected);
0

Другие решения

Метод saveMany () ожидает массив моделей, а не идентификаторов

0

Я использую флажки в представлении:

@foreach($bedrooms as $row)
<input type="checkbox" name="bedrooms[]" value="<?php echo $row->id ?>">{{$row->name}}<br/>
@endforeach

Сделать Спальня Критерии на модели ..
Как это

class BedroomCriteria extends Eloquent {
public function Bedroom() {
return $this->belongsTo('Bedroom');
}

public function Criteria() {
return $this->belongsTo('Criteria');
}

}

Тогда код сохранения на контроллере выглядит так

  if (isset($input["bedrooms"])) {
foreach ($input['bedrooms'] as $check) {
$bedroom_criteria = array(
"bedroom_id" => $check,
"criteria_id" => $input['id']
);
$bedroom_criteria= BedroomCriteria::create($bedroom_criteria);
}
}
0
По вопросам рекламы [email protected]