2016-05-19 11 views
1
$model-save() 

trueが返され、データベースに行が追加されます。しかし、データベースにフィールドのデフォルト値はありません。どうしましたか?アクションコントローラおよびスキームDBとモデルのActiveRecordがあるなぜこのActiveRecord :: saveはモデルを正常に保存しますか?

アクションコントローラ

public function actionCreate() 
{ 
    $model = new Requests(); 
    $model->user_id = null; 

    if ($model->load(Yii::$app->request->post()) && $model->save()) { 

     Yii::$app->response->format = Response::FORMAT_JSON; 

     $response = [ 
      'id' => $model->id, 
      'url' => 'request-lease/'.$model->url, 
     ]; 

     return $response; 

    } else { 
     return BaseHtml::errorSummary($model, ['class' => 'alert alert-danger']); 
    } 
} 

モデルのActiveRecord

class Requests extends \yii\db\ActiveRecord 
{ 
/** Inactive status */ 
const STATUS_UNVERIFIED = 0; 
/** Active status */ 
const STATUS_ACTIVE = 1; 
/** Blocked status */ 
const STATUS_BLOCKED = 3; 
/** Deleted status */ 
const STATUS_DELETED = 5; 
/** Expired status */ 
const STATUS_EXPIRED = 6; 

/** 
* Finance Array 
*/ 
public static $trade_finance_arr = [ 
    1 => 'Leased', 
    2 => 'Financed', 
    3 => 'Owned', 
    4 => 'Other' 
]; 

/** 
* Trade condition array 
*/ 
public static $trade_condition_arr = [ 
    1 => 'Excellent', 
    2 => 'Good', 
    3 => 'Fair', 
    4 => 'Poor' 
]; 


/** 
* @var string Model status. 
*/ 
private $_status; 

private $_credit_score; 

public $offersCount; 

/** 
* @inheritdoc 
*/ 
public static function tableName() 
{ 
    return '{{%carbuilder_requests}}'; 
} 

/** 
* @inheritdoc 
*/ 
public function behaviors() 
{ 
    return [ 
     'timestampBehavior' => [ 
      'class' => TimestampBehavior::className(), 
     ], 
    ]; 
} 

/** 
* @inheritdoc 
*/ 
public function rules() 
{ 
    return [ 
//   [['user_id', 'vin', 'miles', 'zip', 'exterior_color', 'interior_color', 'comments', 'miles_per_year', 'started', 'term', 'credit_company', 'url', 'packages_ids', 'options_ids', 'created_at', 'updated_at', 'total_msrp', 'styleId'], 'required'], 
     [['user_id', 'zip', 'miles_per_year', 'started', 'term', 
      'credit_company', 'status_id', 'created_at', 'updated_at', 'total_msrp', 'styleId', 
      'trade_finance','trade_bank','trade_term','trade_miles', 'trade_condition', 
      'credit_score'], 'integer'], 
     [['vin'], 'string', 'max' => 17], 
     [['name', 'surname'], 'string', 'max' => 50], 
     [['phone'], 'string', 'max' => 30], 
     [['exterior_color', 'interior_color'], 'string', 'max' => 125], 
     [['comments','trade_comments'], 'string', 'max' => 1000], 
     [['url', 'pdf'], 'string', 'max' => 255], 
     [['packages_ids', 'options_ids'], 'string', 'max' => 512], 
     [['url'], 'unique'], 
     [['income'], 'double'] 
     //[['user_id'], 'exist', 'skipOnError' => true, 'targetClass' => User::className(), 'targetAttribute' => ['user_id' => 'id']], 
    ]; 
} 

/** 
* @inheritdoc 
*/ 
public function attributeLabels() 
{ 
    return [ 
     'id' => 'ID', 
     'user_id' => 'User ID', 
     'vin' => 'Vin', 
     'trade_miles' => 'Miles', 
     'zip' => 'Zip', 
     'exterior_color' => 'Exterior Color', 
     'interior_color' => 'Interior Color', 
     'comments' => 'Comments', 
     'miles_per_year' => 'Miles Per Year', 
     'started' => 'Started', 
     'term' => 'Term', 
     'credit_company' => 'Credit Company', 
     'url' => 'Url', 
     'status_id' => 'Status ID', 
     'packages_ids' => 'Packages Ids', 
     'options_ids' => 'Options Ids', 
     'created_at' => 'Created At', 
     'updated_at' => 'Updated At', 
     'total_msrp' => 'Total Msrp', 
     'styleId' => 'Style ID', 
     'pdf' => 'PDF', 
     'activation_at' => 'Activation At' 
    ]; 
} 

/** 
* @inheritdoc 
*/ 
public function beforeSave($insert) 
{ 
    if ($insert) { 
     if ($this->user_id === null) { 
      $this->user_id = (Yii::$app->user->id) ? Yii::$app->user->id : 0; 
     } 
    } 

    return parent::beforeSave($insert); 
} 

/** 
* @inheritdoc 
*/ 
public function afterSave($insert, $changedAttributes) 
{ 
    if ($insert) { 
     $this->setUrl(); 
    } 

    parent::afterSave($insert, $changedAttributes); 
} 

public static function findRequestbyUrl($node){ 


    return self::find()->where(['url'=>$node])->one(); 

} 

/** 
* @return \yii\db\ActiveQuery 
*/ 
public function getOffers() 
{ 
    return $this->hasMany(Offers::className(), ['request_id' => 'id']); 
} 

/** 
* @return \yii\db\ActiveQuery 
*/ 
public function getOffer() 
{ 
    return $this->hasOne(Offers::className(), ['request_id' => 'id']) 
     ->where(['user_id' => Yii::$app->user->id]) 
     ->inverseOf('request'); 
} 

/** 
* @return \yii\db\ActiveQuery 
*/ 
public function getUser() 
{ 
    return $this->hasOne(User::className(), ['id' => 'user_id']); 
} 

/** 
* @return \yii\db\ActiveQuery 
*/ 
public function getVehicle() 
{ 
    return $this->hasOne(Vehicle::className(), ['styleId' => 'styleId']); 
} 

/** 
* @return \yii\db\ActiveQuery 
*/ 
public function getBank() 
{ 
    return $this->hasOne(CreditCompany::className(), ['id' => 'trade_bank']); 
} 

/** 
* @return integer 
*/ 
public function getNewCountMessages() 
{ 
    $count = 0; 
    foreach($this->offers as $offer) { 
     $count += $offer->newCountMessages; 
    } 
    return $count; 
} 

/** 
* @return \yii\db\ActiveQuery 
*/ 
public function getPackages() 
{ 
    if(empty($this->packages_ids)) return false; 
    $packages = rtrim($this->packages_ids, ','); 
    $packages = explode(',', $packages); 
    return PackageOptions::find()->where(['optionsId' => $packages, 'styleId' => $this->styleId])->groupBy(['optionsId','styleId'])->all(); 
} 

/** 
* @return \yii\db\ActiveQuery 
*/ 
public function getOptions() 
{ 
    if(empty($this->options_ids)) return false; 
    $options = rtrim($this->options_ids, ','); 
    $options = explode(',', $options); 
    return PackageOptions::find()->where(['optionsId' => $options, 'styleId' => $this->styleId])->groupBy(['optionsId','styleId'])->all(); 
} 
/** 
* Change or create Request url 
* @param string|null $url Url of request 
* @return boolean true if lease url was successfully changed 
*/ 
public function setUrl($url = null) 
{ 
    if($url) { 
     Route::saveUrl($url, 'carbuilder/requests/summary'); 
     $this->url = $url; 
     return $this->save(false); 
    } 

    $url = Inflector::slug($this->vehicle->make . '-' . $this->vehicle->model . '-' . $this->vehicle->trim . '-' . $this->vehicle->year . '-' . $this->exterior_color . '-' . $this->id); 

    Route::saveUrl($url, 'carbuilder/requests/summary'); 
    $this->url = $url; 
    return $this->save(false); 
} 
} 

スキームデータベース

CREATE TABLE `lfl_carbuilder_requests` (
`id` int(11) NOT NULL AUTO_INCREMENT, 
`user_id` int(11) NOT NULL, 
`vin` varchar(17) NOT NULL, 
`zip` int(5) NOT NULL, 
`exterior_color` varchar(125) NOT NULL, 
    `interior_color` varchar(125) NOT NULL, 
    `comments` varchar(1000) NOT NULL, 
    `miles_per_year` int(5) NOT NULL, 
    `started` int(11) NOT NULL, 
    `term` tinyint(2) NOT NULL, 
    `credit_company` tinyint(4) NOT NULL, 
    `url` varchar(255) NOT NULL, 
    `status_id` tinyint(4) NOT NULL DEFAULT '0', 
    `packages_ids` varchar(512) NOT NULL, 
    `options_ids` varchar(512) NOT NULL, 
    `created_at` int(11) NOT NULL, 
    `updated_at` int(11) NOT NULL, 
    `total_msrp` int(11) DEFAULT NULL, 
    `styleId` varchar(20) NOT NULL, 
    `pdf` varchar(255) NOT NULL, 
    `trade_finance` int(2) NOT NULL, 
    `trade_bank` int(4) NOT NULL, 
    `trade_term` int(2) NOT NULL, 
    `trade_miles` int(5) NOT NULL, 
    `trade_condition` int(2) NOT NULL, 
    `trade_comments` varchar(1000) NOT NULL, 
    `name` varchar(50) DEFAULT NULL, 
    `surname` varchar(50) DEFAULT NULL, 
    `phone` varchar(30) DEFAULT NULL, 
    `state` varchar(30) NOT NULL, 
    `location` varchar(30) NOT NULL, 
    `credit_score` tinyint(1) DEFAULT NULL, 
    `income` double NOT NULL, 
    `activation_at` int(11) DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `url` (`url`), 
    KEY `status_id` (`status_id`), 
    KEY `styleId` (`styleId`), 
    KEY `FK_users_requests` (`user_id`) 
) ENGINE=InnoDB AUTO_INCREMENT=661 DEFAULT CHARSET=utf8 

POSTリクエスト

exterior_color:"Deep Sea Blue Metallic" 
interior_color:"Aluminum Hexagon W/Estoril Blue Matte Highlight" 
options_ids:"" 
packages_ids:"200744520" 
request_id:0 
styleId:200744434 
total_msrp:41550 
user_id:0 
+0

アクション、モデル、スキーマコード – scaisEdge

+0

あなたのテーブルに 'NULL'フィールドが許可されている可能性がありますか?おそらくあなたのコードのどこかに '$ model'のプロパティが自動的に設定されているからでしょうか?私たちはあなたに良い答えを与えるために十分な情報がありません。 – Jerodev

+0

@Jerodev NULLは許可されておらず、いくつかのプロパティのみが設定されていますが、他のフィールド –

答えて

0

この回答は、あなたが投稿したIDフィールド以外のフィールドは提出されていないと考えています。データベース内の

Idは、それが以前の値によってインクリメントとid

セカンドを返し、あなたはあなたのフォーム選択ボックスやラジオボタンで使用される場合は、デフォルト値をとりますだ理由です自動インクリメント

`id` int(11) NOT NULL AUTO_INCREMENT, 

です。

+0

他のフィールドはどうですか?どのようなデフォルト値ですか? –

+0

@VladimirKovalchuk選択ボックスまたはラジオボタンを使用している場合は、選択ボックスのデフォルト値を使用し、ラジオボタン –

+0

がこれらのプロパティのみがコントローラにロードされます 'deep_color:" Deep Sea Blue Metallic " interior_color : "アルミ六角W /エストリル・ブルーマットハイライト" options_ids: "" packages_ids: "200744520" REQUEST_ID:0 styleId:200744434 total_msrp:41550 のuser_id:0 ' –

関連する問題