Сохранение двух значений из справочника в бд через dropdownlist
Сохранение двух значений из справочника в бд через dropdownlist
Доброе время суток, проблемка следующего характера, есть dropdownlist, в него подгружаться массив из справочника в бд и сохраняются данные в поле др таблицы, но мне необходимо еще и сохранять id выбранного значения из справочника в др поле этой же таблицы. Не подскажите как это можно реализовать? Спасибо!
Re: Сохранение двух значений из справочника в бд через dropdownlist
сформулируйте более точно что вам нужно, сейчас вообще ничего не понятно
Re: Сохранение двух значений из справочника в бд через dropdownlist
Есть таблица: lines, в ней есть поля: id, line, data, nom_id.
Есть таблица: nom, в ней есть поля: id, par_nom_id, data - является справочником.
В dropdownlist выводятся список из поля data таблицы nom и выбранное значение сохраняется в таблицу lines в поле data, но мне надо еще сохранить в таблицу lines в поле nom_id значение поля par_nom_id из таблицы nom, подскажите как это возможно реализовать? Спасибо.
Re: Сохранение двух значений из справочника в бд через dropdownlist
Если nom является справочной то зачем дублировать из нее информацию в таблицу lines?
Достаточно в nom_id сослаться на id нужного NOM.
и возможно вы неправильно сформировали данные для вашего dropdownlist, возможно это вам поможет:
Достаточно в nom_id сослаться на id нужного NOM.
и возможно вы неправильно сформировали данные для вашего dropdownlist, возможно это вам поможет:
Код: Выделить всё
$data = Nom::find()->select(['data', 'id'])->indexBy('id')->column();
Re: Сохранение двух значений из справочника в бд через dropdownlist
согласен что дублирование инфы в таблицах дело не очень хорошее, но так надо. А тот код что Вы написали не могли бы пояснить?andku83 писал(а): ↑2018.11.18, 20:38 Если nom является справочной то зачем дублировать из нее информацию в таблицу lines?
Достаточно в nom_id сослаться на id нужного NOM.
и возможно вы неправильно сформировали данные для вашего dropdownlist, возможно это вам поможет:Код: Выделить всё
$data = Nom::find()->select(['data', 'id'])->indexBy('id')->column();
Re: Сохранение двух значений из справочника в бд через dropdownlist
возвращает список из data таблицы nom ключами которого являются id этих строк, обычно такой список используют для dropdownlist
Re: Сохранение двух значений из справочника в бд через dropdownlist
а в чем конкретно проблема? приведите свой код и посмотрим что там такое
Re: Сохранение двух значений из справочника в бд через dropdownlist
модель
Код: Выделить всё
<?php
namespace app\models;
use Yii;
use himiklab\sortablegrid\SortableGridBehavior;
use yii\data\ArrayDataProvider;
use yii\helpers\Json;
use yii\helpers\ArrayHelper;
/**
* This is the model class for table "tag_line".
*
* @property int $id
* @property int $line
* @property int $position_before
* @property int $position_after
* @property string $data
* @property string $created
* @property string $updated
*/
class Awards extends \yii\db\ActiveRecord
{
/**
* @inheritdoc
*/
public static function tableName()
{
return 'lines';
}
/**
* @inheritdoc
*/
public function rules()
{
return [
[['line', 'nom_id'], 'integer'],
[['data', /*'created', 'updated'*/], 'required'],
[['data'], 'string'],
];
}
/**
* @inheritdoc
*/
public function attributeLabels()
{
return [
'id' => Yii::t('app', 'ID'),
'nom_id' => Yii::t('app', 'Nom_ID'),
'line' => Yii::t('app', 'Line'),
'data' => Yii::t('app', 'Data'),
];
}
/**
* @inheritdoc
* @return AwardsQuery the active query used by this AR class.
*/
public static function find()
{
return new AwardsQuery(get_called_class());
}
//читаем из файла json
public static function readAPI()
{
$dataProviderJSON = new ArrayDataProvider([
'allModels' => Json::decode(file_get_contents('text.json')),
]);
return $dataProviderJSON;
}
public function getNominations()
{
return $this->hasOne(Nomination::className(), ['nom_id' => 'line']);
}
}
Код: Выделить всё
<?php
namespace app\controllers;
use app\models\Nomination;
use Yii;
use app\models\Awards;
use app\models\AwardsSearch;
use yii\helpers\ArrayHelper;
use yii\web\Controller;
use yii\web\NotFoundHttpException;
use yii\filters\VerbFilter;
use himiklab\sortablegrid\SortableGridAction;
/**
* AwardsController implements the CRUD actions for Awards model.
*/
class AwardsController extends Controller
{
public $layout = 'awards';
/**
* @inheritdoc
*/
public function behaviors()
{
return [
'verbs' => [
'class' => VerbFilter::className(),
'actions' => [
'delete' => ['POST'],
],
],
];
}
/**
* Lists all Awards models.
* @return mixed
*/
//сортировка
public function actions()
{
return [
'sort' => [
'class' => SortableGridAction::className(),
'modelName' => Awards::className(),
],
];
}
public function actionIndex()
{
$searchModel = new AwardsSearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
return $this->render('index', [
'searchModel' => $searchModel,
'dataProvider' => $dataProvider,
]);
}
public function actionCreatenomination()
{
$model = new Awards();
$data = Nomination::find()->all();
if ($model->load(Yii::$app->request->post()) && $model->save()) {
return $this->redirect(['view', 'id' => $model->id]);
}
return $this->render('createnomination', [
'model' => $model,
'data' => $data,
]);
}
public function actionDownload()
{
$searchModel = new AwardsSearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
//читаем из файла json
$dataProviderJSON = Awards::readAPI();
//передаем модель
$activeData = $dataProvider->models;
//передаем модель
$arrayData = $dataProviderJSON->models;
//склеиваем данные
$result = Awards::blindData($activeData, $arrayData);
//создаем csv
Awards::createFile($result);
}
public function actionSynchronization()
{
Nomination::exportCSV();
return $this->redirect('index');
}
/**
* Displays a single Awards model.
* @param integer $id
* @return mixed
* @throws NotFoundHttpException if the model cannot be found
*/
public function actionView($id)
{
return $this->render('view', [
'model' => $this->findModel($id),
]);
}
/**
* Creates a new Awards model.
* If creation is successful, the browser will be redirected to the 'view' page.
* @return mixed
*/
public function actionCreate()
{
$model = new Awards();
if ($model->load(Yii::$app->request->post()) && $model->save()) {
return $this->redirect(['view', 'id' => $model->id]);
}
return $this->render('create', [
'model' => $model,
]);
}
/**
* Updates an existing Awards model.
* If update is successful, the browser will be redirected to the 'view' page.
* @param integer $id
* @return mixed
* @throws NotFoundHttpException if the model cannot be found
*/
public function actionUpdate($id)
{
$model = $this->findModel($id);
if ($model->load(Yii::$app->request->post()) && $model->save()) {
return $this->redirect(['view', 'id' => $model->id]);
}
return $this->render('update', [
'model' => $model,
]);
}
/**
* Deletes an existing Awards model.
* If deletion is successful, the browser will be redirected to the 'index' page.
* @param integer $id
* @return mixed
* @throws NotFoundHttpException if the model cannot be found
*/
public function actionDelete($id)
{
$this->findModel($id)->delete();
return $this->redirect(['index']);
}
/**
* Finds the Awards model based on its primary key value.
* If the model is not found, a 404 HTTP exception will be thrown.
* @param integer $id
* @return Awards the loaded model
* @throws NotFoundHttpException if the model cannot be found
*/
protected function findModel($id)
{
if (($model = Awards::findOne($id)) !== null) {
return $model;
}
throw new NotFoundHttpException(Yii::t('app', 'The requested page does not exist.'));
}
}
Код: Выделить всё
<?php
use yii\helpers\Html;
/* @var $this yii\web\View */
/* @var $model app\models\Awards */
$this->title = Yii::t('app', 'Создание номинации');
$this->params['breadcrumbs'][] = ['label' => Yii::t('app', 'Awards'), 'url' => ['index']];
$this->params['breadcrumbs'][] = $this->title;
?>
<div class="awards-create">
<h1><?= Html::encode($this->title) ?></h1>
<?= $this->render('_formnomination', [
'model' => $model,
'data' => $data,
]) ?>
</div>
Код: Выделить всё
<?php
use yii\helpers\Html;
use yii\widgets\ActiveForm;
use \yii\helpers\ArrayHelper;
/* @var $this yii\web\View */
/* @var $model app\models\Awards */
/* @var $form yii\widgets\ActiveForm */
?>
<div class="nomination-form">
<?php $form = ActiveForm::begin(); ?>
<?= $form->field($model, 'data')->dropDownList(ArrayHelper::map($data, 'data', 'data'),
['prompt' => 'Выбирите значение...', 'id' => 'region-selector']); ?>
<div class="form-group">
<?= Html::submitButton(Yii::t('app', 'Сохранить'), ['class' => 'btn btn-success']) ?>
</div>
<?php ActiveForm::end(); ?>
</div>
Re: Сохранение двух значений из справочника в бд через dropdownlist
Странная у вас реализация...
Представление _formnomination
В контроллере в edit и create
Представление _formnomination
Код: Выделить всё
<?= $form->field($model, 'nom_id')->dropDownList(ArrayHelper::map($data, 'par_nom_id', 'data'),
['prompt' => 'Выбирите значение...', 'id' => 'region-selector']); ?>
Код: Выделить всё
if ($model->load(Yii::$app->request->post()) && $model->validate()) {
$model->data = Nomination::findOne(['par_nom_id' => $model->nom_id])->data;
$model->save(false);
....
}
Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа. Роберт Шекли.
Re: Сохранение двух значений из справочника в бд через dropdownlist
ERRORsomeweb писал(а): ↑2018.11.19, 09:16 Странная у вас реализация...
Представление _formnominationВ контроллере в edit и createКод: Выделить всё
<?= $form->field($model, 'nom_id')->dropDownList(ArrayHelper::map($data, 'par_nom_id', 'data'), ['prompt' => 'Выбирите значение...', 'id' => 'region-selector']); ?>
Код: Выделить всё
if ($model->load(Yii::$app->request->post()) && $model->validate()) { $model->data = Nomination::findOne(['par_nom_id' => $model->nom_id])->data; $model->save(false); .... }
пожалуйста, расскажите как дураку че надо сделать =(((
уже нет надежды =(((
Код: Выделить всё
if ($model->load(Yii::$app->request->post()) && $model->validate()) {
$model->data = Nomination::findOne(['par_nom_id' => $model->nom_id])->data; //Trying to get property of non-object
$model->save(false);
}
Re: Сохранение двух значений из справочника в бд через dropdownlist
Код: Выделить всё
if ($model->load(Yii::$app->request->post()) && $model->validate()) {
if (($nom = Nomination::findOne(['par_nom_id' => $model->nom_id])) !== null) {
$model->data = $nom->data;
}
$model->save(false);
....
}
Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа. Роберт Шекли.
Re: Сохранение двух значений из справочника в бд через dropdownlist
$nom пустое, соответственно в бд ничего не пишетsomeweb писал(а): ↑2018.11.19, 10:54Код: Выделить всё
if ($model->load(Yii::$app->request->post()) && $model->validate()) { if (($nom = Nomination::findOne(['par_nom_id' => $model->nom_id])) !== null) { $model->data = $nom->data; } $model->save(false); .... }
Re: Сохранение двух значений из справочника в бд через dropdownlist
Форму подправили? В $model->nom_id что после load()?
Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа. Роберт Шекли.
Re: Сохранение двух значений из справочника в бд через dropdownlist
затупил, сорян
Код: Выделить всё
if ($model->load(Yii::$app->request->post()) && $model->validate())