我已经建立了一个简单的模型&查看,一个简单的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创建的自动属性.数据被分配给您的模糊属性,但不会发送到数据库.
原文链接:https://www.f2er.com/php/130738.html正确的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'; } }