activerecord – Yii2活动记录模式不保存数据

我已经建立了一个简单的模型&查看,一个简单的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';
    }
}

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...