Я пытаюсь найти решение чего-то, что я считаю довольно простым? Я бы хотел создать табличную форму для сбора некоторых записей для опроса.Yii multi модель с HAS_MANY Табличная форма
Table: survey_record
id
meter_id
status_id
create_time
create_user
Table: survey_inspection
id
survey_record_id (FK)
bay_id
bay_usage_id
Таким образом, таблица survey_inspection проверила HAS_MANY из survey_record. Предполагая, что инспектор делает опрос для meter_id = 1001, пользователь идентифицирует status_id счетчика, тогда они должны заполнить 4 контрольных ввода, так как 1001 имеет 4 отсека. Чтобы создать 4 отсека, я просто создал для цикла. Что хорошо работает.
Вид: _form.php
...
$meter=Meter::model()->findByPk($model->meter_id);
$bays = count($meter->bays); //retrieves the number of inspections required
<?php echo $form->dropDownListRow($model,'status_id',$model->getStatusId(),array('prompt'=>'Select Status ...')); ?>
...
<?php for ($i = 1; $i <= $bays; $i++): ?>
<?php echo $form->textFieldRow($inspection, "[$i]bay_id", array('readonly'=>true, 'value'=>"$i", 'class'=>'span1')); ?>
<?php echo $form->dropDownListRow($inspection, "[$i]bay_usage_id", $inspection->getUsageId(), array('prompt'=>'Bay Status ...')); ?>
<?php endfor; ?>
...
Однако, когда я отправить форму я только два приема (не четыре) результаты, и я не могу показаться, чтобы правильно отобразить валидацию полей. Так вот известный файл контроллера: SurveyRecordController.php
public function actionCreate($survey_id, $meter_id)
{
$model=new SurveyRecord;
$inspection = new SurveyInspection;
$model->survey_id = (int)$survey_id;
$model->meter_id = (int)$meter_id;
if(isset($_POST['SurveyRecord'], $_POST['SurveyInspection']))
{
$model->attributes=$_POST['SurveyRecord'];
$valid= $model->validate();
$i=1;
foreach($_POST['SurveyInspection'][$i] as $inspection)
{
$inspection = new SurveyInspection;
$inspection->bay_id =$_POST['SurveyInspection'][$i]['bay_id'];
$inspection->bay_usage_id =$_POST['SurveyInspection'][$i]['bay_usage_id'];
$valid= $inspection->validate() && $valid;
echo '<br/><br/><br/><pre>';
print_r($_POST['SurveyInspection'][$i]);
echo '</pre>';
if($valid)
{
if($model->save(false))
{
$inspection->survey_record_id = $model->id;
$inspection->save(false);
$this->redirect(array('/meter'));
}
}
$i++;
//$inspection->attributes=$_POST['SurveyInspection'][$i];
}
}
$this->render('create',array(
'model'=>$model,
'inspection'=>$inspection,
));
}
У меня странное ощущение, что я не могу делать петлю Еогеасп правильно, так как при просмотре массива $ _POST [ «SurveyInspection»] [$ я ] Я возвращаюсь только с двумя записями, когда их должно быть четыре.
Некоторые данные, которые могут быть полезны:
PHP version: 5.4.14 Yii version: 1.1.13 PostgreSQL version: 9.1.9
Спасибо любезно :)
@nihad, вы правы, я удалил false, но до сих пор не получаю ожидаемых результатов. – Glicious
Тогда попробуйте код, предложенный PeterM. Ваш цикл foreach не подходит. – Ninad