Товары не нужно набирать, как в обычном ИМ, их немного. Товары расположены в таблице(~15 шт). Человек просто задает количество, нажимает кнопку "Зарегистрироваться".
Думал писать отдельный контроллер Cart, и кидать товары в сессии, но не вариант. Товаров то мало. И товары просто набираются на одной странице.
Использую таблицы:
Products - информация о товаре(Id, название, цена, путь к картинке, статус( 0/1)
Users - данные о пользователе. Уже готово - проблем нет;
Orders - данные о заказе.
Order_Products - заказанные продукты. (Id, order_id, product_id, name, quantity, price)
------
Товаров 15 шт. Но в таблицу Order_Products попадают только товары с выбранным кол-вом > 1.
Думаю реализовать при помощи Табличного ввода. Model::loadMultiple()/Model::validateMultiple().
Но я не знаю, как сделать 15 input полей для таблицы Orders_Products, где отбираются значения с кол-во>0, где product_id соответствует реальному продукту, которые сохранятся в таблицу Orders_Products
Yii2 я еще не так глубоко изучил, а мозгов не хватает, как это реализовать. Перечитал русскоязычную документацию, но хочется сделать коротко и грамотно. Помогите пожалуйста!
Что примерно нужно.
(Код с регистрацией пользователя я опустил)
Контроллер
Код: Выделить всё
public function actionSignup()
{
$model = new SignupForm();
$order = new Orders();
$products = Products::find()->indexBy('id')->where(['status' => 1])->all();
$count_order_p = count(Yii::$app->request->post('order_products', []));
$order_products = [new OrderProducts()];
for($i = 1; $i < $count_order_p; $i++) {
$order_products[] = new OrderProducts();
}
if (Model::loadMultiple($order_products, Yii::$app->request->post()) && Model::validateMultiple($order_products)) {
foreach ($order_products as $order_product) {
$order_product->save(false);
}
}
if (Model::loadMultiple($products, Yii::$app->request->post()) && Model::validateMultiple($products)) {
foreach ($products as $product) {
$product->save(false);
}
}
return $this->render(
'signup',
[
'model' => $model,
'order' => $order,
'order_products' =>$order_products,
'products' =>$products
]
);
}
Код: Выделить всё
<?php $form = ActiveForm::begin(); ?>
<div class="col-md-6">
<?php if (\Yii::$app->session->hasFlash('success')):?>
<div class="alert alert-success" role="alert"><?= \Yii::$app->session->getFlash('success')?></div>
<?php endif?>
<?php if (\Yii::$app->session->hasFlash('error')):?>
<div class="alert alert-danger" role="alert"><?= \Yii::$app->session->getFlash('error')?></div>
<?php endif?>
<?php $form = ActiveForm::begin(); ?>
/*** Поля для регистрации пользователя ***/
</div>
<div class="col-md-6">
<table class="table">
<thead>
<tr>
<th>Фото</th>
<th>Название</th>
<th>Кол-во</th>
<th>Цена</th>
<th>Удалить</th>
</tr>
</thead>
<tbody>
/*Просто заполняю продукцию из таблицы Products*/
<?php foreach ($products as $product): ?>
<tr>
<td><?= $form->field($product,"[]name"); ?></td>
<td><?= $form->field($product,"[]price"); ?></td>
<td><?= $form->field($product,"[]quantity"); ?></td> /*Вот это поле должно заполнять таблицу Order_Products , но не знаю как*/
<td><?= $form->field($product,"[]image"); ?></td>
<td><?= $form->field($product,"[]status"); ?></td>
</tr>
<?php endforeach; ?>
</tbody>
/*Здесь попробовал вывести таблицу Order_Products*/, выводит 1 строчку(
</table>
</br>
<table class="table">
<thead>
<tr>
<th>Фото</th>
<th>Название</th>
<th>Кол-во</th>
<th>Цена</th>
<th>Удалить</th>
</tr>
</thead>
<tbody>
<?php foreach ($order_products as $order_product): ?>
<tr>
<td><?= $form->field($order_product,"[]product_id"); ?></td>
<td><?= $form->field($order_product,"[]product_name"); ?></td>
<td><?= $form->field($order_product,"[]order_id"); ?></td>
<td><?= $form->field($order_product,"[]quantity"); ?></td>
<td><?= $form->field($order_product,"[]price"); ?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
<div class="form-group">
<?= Html::submitButton('Отправить', ['class' => 'btn btn-primary']) ?>
</div>
<?php ActiveForm::end(); ?>