В общем, есть массив со следующим содержимым:
Array
(
[0] => common\models\references\SQuizQuestion Object
(
[topics_id_arr] =>
[_attributes:yii\db\BaseActiveRecord:private] => Array
(
[id_rec] => 821
[name_quest] => Вопрос №4
[text_quest] => Текст к вопросу №4
[msg_quest] => Сообщение к вопросу №4
[random] => 1
[dt_up] => 13.06.2017 10:21:17
[status] => 1
)
[_related:yii\db\BaseActiveRecord:private] => Array
(
[squizqa] => Array
(
[0] => common\models\references\SQuizQA Object
(
[_attributes:yii\db\BaseActiveRecord:private] => Array
(
[id_rec] => 365
[id_question] => 821
[name_answer] => Второй
[text_answer] => Не правильный
[corr_answer] => 0
[dt_up] => 13.06.2017 10:21:17
[status] => 1
)
[_related:yii\db\BaseActiveRecord:private] => Array
(
)
[_errors:yii\base\Model:private] =>
[_validators:yii\base\Model:private] =>
[_scenario:yii\base\Model:private] => default
[_events:yii\base\Component:private] => Array
(
)
[_behaviors:yii\base\Component:private] => Array
(
)
)
[1] => common\models\references\SQuizQA Object
(
[_attributes:yii\db\BaseActiveRecord:private] => Array
(
[id_rec] => 364
[id_question] => 821
[name_answer] => Первый
[text_answer] => Правильный
[corr_answer] => 1
[dt_up] => 13.06.2017 10:21:17
[status] => 1
)
[_related:yii\db\BaseActiveRecord:private] => Array
(
)
[_errors:yii\base\Model:private] =>
[_validators:yii\base\Model:private] =>
[_scenario:yii\base\Model:private] => default
[_events:yii\base\Component:private] => Array
(
)
[_behaviors:yii\base\Component:private] => Array
(
)
)
)
)
[_errors:yii\base\Model:private] =>
[_validators:yii\base\Model:private] =>
[_scenario:yii\base\Model:private] => default
[_events:yii\base\Component:private] => Array
(
)
[_behaviors:yii\base\Component:private] => Array
(
)
)
[1] => common\models\references\SQuizQuestion Object
(
[topics_id_arr] =>
[_attributes:yii\db\BaseActiveRecord:private] => Array
(
[id_rec] => 781
[name_quest] => Вопрос №1
[text_quest] => Текст к вопросу №1
[msg_quest] => Сообщение к вопросу №1
[random] => 1
[dt_up] => 07.06.2017 11:00:59
[status] => 1
)
[_related:yii\db\BaseActiveRecord:private] => Array
(
[squizqa] => Array
(
[0] => common\models\references\SQuizQA Object
(
[_attributes:yii\db\BaseActiveRecord:private] => Array
(
[id_rec] => 321
[id_question] => 781
[name_answer] => Простой ответ
[text_answer] => Правильный ответ
[corr_answer] => 1
[dt_up] => 13.06.2017 10:19:25
[status] => 1
)
[_related:yii\db\BaseActiveRecord:private] => Array
(
)
[_errors:yii\base\Model:private] =>
[_validators:yii\base\Model:private] =>
[_scenario:yii\base\Model:private] => default
[_events:yii\base\Component:private] => Array
(
)
[_behaviors:yii\base\Component:private] => Array
(
)
)
[1] => common\models\references\SQuizQA Object
(
[_attributes:yii\db\BaseActiveRecord:private] => Array
(
[id_rec] => 361
[id_question] => 781
[name_answer] => Простой ответ
[text_answer] => Не правильный ответ
[corr_answer] => 0
[dt_up] => 13.06.2017 10:19:25
[status] => 1
)
[_related:yii\db\BaseActiveRecord:private] => Array
(
)
[_errors:yii\base\Model:private] =>
[_validators:yii\base\Model:private] =>
[_scenario:yii\base\Model:private] => default
[_events:yii\base\Component:private] => Array
(
)
[_behaviors:yii\base\Component:private] => Array
(
)
)
)
)
[_errors:yii\base\Model:private] =>
[_validators:yii\base\Model:private] =>
[_scenario:yii\base\Model:private] => default
[_events:yii\base\Component:private] => Array
(
)
[_behaviors:yii\base\Component:private] => Array
(
)
)
Как мне из этого массива сделать выборку, что бы сначала вывело:
Сначала вопрос:
[name_quest] => Вопрос №4
[text_quest] => Текст к вопросу №4
[msg_quest] => Сообщение к вопросу №4
Потом ответы на него:
[id_rec] => 365
[id_question] => 821
[name_answer] => Второй
[text_answer] => Не правильный
[corr_answer] => 0
[id_rec] => 364
[id_question] => 821
[name_answer] => Первый
[text_answer] => Правильный
[corr_answer] => 1
Потом опять вопрос:
[id_rec] => 781
[name_quest] => Вопрос №1
[text_quest] => Текст к вопросу №1
[msg_quest] => Сообщение к вопросу №1
Потом ответы на него:
[id_rec] => 321
[id_question] => 781
[name_answer] => Простой ответ
[text_answer] => Правильный ответ
[corr_answer] => 1
[id_rec] => 361
[id_question] => 781
[name_answer] => Простой ответ
[text_answer] => Не правильный ответ
[corr_answer] => 0
Как правильно сделать выборку данных и в цикле на страницу выводить по очереди такие данные?
Модель:
// Получаем в массив $Question все записи из таблицы SQuizQuestion где id_rec = $Question_id
public function getQuestion($Question_id)
{
$Question = SQuizQuestion::find()
->where(['id_rec' => $Question_id])
->all();
foreach ($Question as $Quest) {
// Получаем связанные записи из таблицы SQuizQA для каждого вопроса
$QuestionAnswer = $Quest->squizqa;
}
return $Question;
}
public function getSquizqa()
{
return $this->hasMany(SQuizQA::className(), ['id_question' => 'id_rec']);
}
Контроллер:
// Получаем в массив $Questions все записи из таблицы SQuizQuestion где id_rec = $Question_id
$Questions = $modelTestSystem->getQuestion($Question_id);
Выводит либо все вопросы с ответами, либо, если передан id
вопроса, то только его:
Контроллер:
public function actionQuestions($questionId = null)
{
$query = SQuizQuestion::find()->with('squizqa');
$questionId ? $query->where(['id_rec' => $questionId]) : null;
return $this->render('questions', [
'questions' => $query->all(),
]);
}
Во вьюшке questions
:
foreach ($questions as $question) {
echo $question->name_quest . ' : ' . $question->text_quest; // Вывод вопроса
// Вывод ответов
foreach (question->squizqa as $answer) {
echo '<p>';
echo $answer->name_answer . ' : ' . $answer->text_answer;
echo '</p>';
}
}
На выходе вы получаете ассоциативный массив, у которого ключ это Id вопроса, и два вложенных массива, это вопрос и массив ответов. Вам осталось просто правильно их вывести. Но это решение не самое правильное, я лишь дал вам результат который вы просили - это массив. Правильнее всего было бы передать $Questions в вид, и там уже правильно все это отобразить
public function getQuestion($Question_id)
{
$result = [];
$Question = SQuizQuestion::find()
->where(['id_rec' => $Question_id])
->all();
if($Question) {
foreach ($Question as $Quest) {
$result[$Quest->id_rec]['question'] = [
'name_quest' => $Quest->name_quest,
'text_quest' => $Quest->text_quest,
'msg_quest' => $Quest->msg_quest
];
if($Quest->squizqa) {
foreach($Quest->squizqa as $answ) {
$result[$Quest->id_rec]['answers'][] = [
'id_question' => $answ->id_question,
'name_answer' => $answ->name_answer,
'text_answer' => $answ->text_answer,
'corr_answer' => $answ->corr_answer,
];
}
}
}
}
return $result;
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Получаю содержимое страницы с другого сайта с помощью cURLСтолкнулся с проблемой загрузки стилей если в пути нет доменного имени, решил проблему...