2016-08-01 42 views
2

我有一個產品模型可以將信息保存到數據庫中的產品表格中,但我也有價格表格,顏色表格和尺寸表格在我的數據庫中和表格上所有的產品信息,包括通過產品控制器和產品型號的價格,尺寸和顏色,現在我想知道如何在表格中以不同方式節省價格,尺寸和顏色。下面是一個快照如何在yii2中的一個模型中使用多個表格

public function actionCreate(){ 
$data = \Yii::$app->request->post(); 
$model = new Product(); 
$model->title = $data['title']; 
$model->name = $data['name']; 
} 

現在我怎樣才能改變這種表名價格或尺寸或顏色,以便能夠$data['size'] and $data['color'] and $data['price']保存到有相應的列

+0

從您的問題的標題'如何使用...'的答案是使用'使用':) – SaidbakR

回答

2

一個模型與一個數據庫表關聯。

至於處理不同類型的多個模型,官方文檔中有一篇很好的文章 - Getting Data for Multiple Models

忽略的細節,這裏是控制器代碼片段:

namespace app\controllers; 

use Yii; 
use yii\base\Model; 
use yii\web\Controller; 
use yii\web\NotFoundHttpException; 
use app\models\User; 
use app\models\Profile; 

class UserController extends Controller 
{ 
    public function actionUpdate($id) 
    { 
     $user = User::findOne($id); 
     if (!$user) { 
      throw new NotFoundHttpException("The user was not found."); 
     } 

     $profile = Profile::findOne($user->profile_id); 

     if (!$profile) { 
      throw new NotFoundHttpException("The user has no profile."); 
     } 

     $user->scenario = 'update'; 
     $profile->scenario = 'update'; 

     if ($user->load(Yii::$app->request->post()) && $profile->load(Yii::$app->request->post())) { 
      $isValid = $user->validate(); 
      $isValid = $profile->validate() && $isValid; 
      if ($isValid) { 
       $user->save(false); 
       $profile->save(false); 
       return $this->redirect(['user/view', 'id' => $id]); 
      } 
     } 

     return $this->render('update', [ 
      'user' => $user, 
      'profile' => $profile, 
     ]); 
    } 
} 

,爲View:

<?php 
use yii\helpers\Html; 
use yii\widgets\ActiveForm; 

$form = ActiveForm::begin([ 
    'id' => 'user-update-form', 
    'options' => ['class' => 'form-horizontal'], 
]) ?> 
    <?= $form->field($user, 'username') ?> 

    ...other input fields... 

    <?= $form->field($profile, 'website') ?> 

    <?= Html::submitButton('Update', ['class' => 'btn btn-primary']) ?> 
<?php ActiveForm::end() ?> 

這篇文章也可能是有用的 - Collecting tabular input。它涵蓋了從同一類型的多個模型收集數據。

又看了Models部分,尤其是驗證規則大規模分配段落。你應該避免處理$_POST這樣的參數。

+1

好的解決方案。有用! –

0

你應該爲每個表格建立一個模型。在價格,顏色和尺寸表中插入產品的ID。在所有其他表中添加product_id。並試試這個:

public function actionCreate() 
{ 
    $data = \Yii::$app->request->post(); 
    $model = new Product(); 
    $model->title = $data['title']; 
    $model->name = $data['name']; 
    $model->save(); 
    $getlast=Yii::$app->db->getLastInsertId(); 

    $model = new Price(); 
    $model->price=Yii::$app->request->post('price'); 
    $model->product_id = $getlast; 
    $model->save(); 

    $model = new Size(); 
    $model->size=Yii::$app->request->post('size'); 
    $model->product_id = $getlast; 
    $model->save(); 
} 
+0

好的謝謝你們的想法我知道我可以這樣做,但我想也許這是可能的沒有模型分開的顏色,大小也許我可以只改變表名稱動態,但我認爲從所有的答案我得到它幾乎是不可能的,所以我需要爲每個表創建一個模型 – sam

相關問題