我已经建立了一个简单的模型&查看,一个简单的AR模型和一个简单的控制器.表单模型将正确的值分配给AR实例,但是当我调用save()时,这些值都不会保存在DB中.有任何想法吗?
表单模型:
<?PHP
namespace app\models;
use Yii;
use yii\base\Model;
class PromptForm extends Model
{
public $name;
public $intro;
public $prompt;
public $notes;
public $questions;
public function attributeLabels()
{
return [
'name' => 'Prompt title','intro' => 'Intro','prompt' => 'Prompt body','notes' => 'Closing notes','questions' => 'Exploration questions',];
}
/**
* @return array the validation rules.
*/
public function rules()
{
return [
[['name','prompt'],'required'],['name','filter','filter' => 'trim'],'string','max' => 255],[['intro','prompt','notes','questions'],'default'],];
}
public function post()
{
if ($this->validate()) {
$prompt = new Prompt();
$prompt->name = $this->name;
$prompt->intro = $this->intro;
$prompt->prompt = $this->prompt;
$prompt->notes = $this->notes;
$prompt->questions = $this->questions;
$prompt->author = \Yii::$app->user->getId();
//die(print_r($prompt,TRUE));
$prompt->save();
return $prompt;
}
return null;
}
}
AR模型:
<?PHP
namespace app\models;
use Yii;
use yii\db\ActiveRecord;
/**
* Prompt is the model behind the prompt item.
*/
class Prompt extends ActiveRecord
{
public $name;
public $intro;
public $prompt;
public $notes;
public $questions;
public $status;
public $author;
public $id;
/**
* @return string the name of the table associated with this ActiveRecord class.
*/
public static function tableName()
{
return 'prompt';
}
/**
* @return array the attribute labels.
*/
public function attributeLabels()
{
return [
'name' => 'Prompt title','status' => 'Status','author' => 'Author ID',];
}
}
控制器:
<?PHP
namespace app\controllers;
use Yii;
use yii\filters\AccessControl;
use yii\web\Controller;
use yii\filters\VerbFilter;
use app\models\PromptForm;
use app\models\Prompt;
class PromptsController extends Controller
{
public function actionIndex()
{
// Return a list of all prompts:
return $this->render('index');
}
public function actionNew()
{
if (\Yii::$app->user->isGuest) {
return $this->goHome();
}
$model = new PromptForm();
if ($model->load(Yii::$app->request->post())) {
if ($prompt = $model->post()) {
Yii::$app->getSession()->setFlash('success','Your prompt was created successfully!');
return $this->goHome();
} else {
Yii::$app->getSession()->setFlash('error','Error while submitting your prompt.');
}
}
return $this->render('create',[
'model' => $model,]);
}
}
好的,我想出来了原来,如果您在ActiveRecord模型中声明公共属性,它们会掩盖由AR创建的自动属性.数据被分配给您的模糊属性,但不会发送到数据库.
正确的AR模型应该是这样的:
<?PHP
namespace app\models;
use Yii;
use yii\db\ActiveRecord;
class Prompt extends ActiveRecord
{
/**
* @return string the name of the table associated with this ActiveRecord class.
*/
public static function tableName()
{
return 'prompt';
}
}