gpt4 book ai didi

activerecord - Yii2事件记录模型不保存数据

转载 作者:行者123 更新时间:2023-12-04 00:41:51 25 4
gpt4 key购买 nike

我已经构建了一个简单的表单模型和 View 、一个简单的 AR 模型和一个简单的 Controller 。表单模型为 AR 实例分配了正确的值,但是当我调用 save() 时,这些值都没有保存在数据库中。有任何想法吗?

表格模型:

<?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'],
['name', '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',
'intro' => 'Intro',
'prompt' => 'Prompt body',
'notes' => 'Closing notes',
'questions' => 'Exploration questions',
'status' => 'Status',
'author' => 'Author ID',
];
}
}

Controller :
<?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 模型中声明公共(public)属性,它们会掩盖 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';
}
}

关于activerecord - Yii2事件记录模型不保存数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26827002/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com