我正在慢慢学习 CodeIgniter 的第 4 版,我偶然发现了一个奇怪的行为:
使用save()
我的模型的方法时,它只保存created_at
和updated_at
时间戳。
这是有用的代码。
移民
public function up()
{
$this->forge->addField('id');
$this->forge->addField([
'title' => [
'type' => 'varchar',
'constraint' => 127
],
'content' => [
'type' => 'text'
],
'slug' => [
'type' => 'varchar',
'constraint' => 127
],
'created_at' => [
'type' => 'datetime'
],
'updated_at' => [
'type' => 'datetime'
],
'deleted_at' => [
'type' => 'datetime',
'null' => true
]
]);
$this->forge->createTable('articles');
}
注意:它工作正常,表在数据库中正确创建,如下所示。
+------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+----------------+
| id | int(9) | NO | PRI | NULL | auto_increment |
| title | varchar(127) | NO | | NULL | |
| content | text | NO | | NULL | |
| slug | varchar(127) | NO | | NULL | |
| created_at | datetime | NO | | NULL | |
| updated_at | datetime | NO | | NULL | |
| deleted_at | datetime | YES | | NULL | |
+------------+--------------+------+-----+---------+----------------+
实体
namespace App\Entities;
class Article
{
}
模型
namespace App\Models;
class ArticleModel extends \CodeIgniter\Model
{
protected $table = 'articles';
protected $returnType = 'App\Entities\Article';
protected $allowedFields = ['title', 'content', 'slug'];
protected $useTimestamps = true;
}
调用模型
我尝试使用下面的代码从两个不同的地方调用模型:播种机和控制器。
$article = new \App\Entities\Article();
$article->title = 'Article Title';
$article->content = 'Article Content';
$model = new \App\Models\ArticleModel();
$model->save($article);
echo $model->getLastQuery();
两次,结果都是一样的。显示echo
如下。
INSERT INTO `articles` (`created_at`, `updated_at`) VALUES ('2019-10-09 02:25:56', '2019-10-09 02:25:56')
我不知道如何告诉我的模型(我认为这是不良行为的原因)考虑到它$allowedFields
来保存文章。
你能看出问题吗?