Пользователь может выбрать несколько вариантов:
<!-- 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');
}
Большое спасибо за вашу помощь.
saveMany
будет работать в этом сценарии, вам просто нужно сначала преобразовать входной массив в набор новых моделей. Предполагая, что вы знаете идентификатор критерия, попробуйте это:
foreach (Input::get('bedrooms') as $bedroom) {
$selected[] = New Bedroom(['bedroom' => $bedroom]);
}
$criteria = Criteria::find($criteria_id)->bedrooms()->saveMany($selected);
Метод saveMany () ожидает массив моделей, а не идентификаторов
Я использую флажки в представлении:
@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);
}
}