$model->save() 不使用实体
$model->save() doesn't use entity
我正在慢慢学习 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');
}
注意: 它工作正常,table 已在数据库中正确创建,如下所示。
+------------+--------------+------+-----+---------+----------------+
| 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
以保存文章。
你能看出问题所在吗?
在那种情况下,模型的 save()
方法只接受 class CodeIgniter\Entitiy
的对象。
最好的做法是 Article
扩展 class:
namespace App\Entities;
class Article extends \CodeIgniter\Entitiy
{
}
这解决了问题。
我正在慢慢学习 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');
}
注意: 它工作正常,table 已在数据库中正确创建,如下所示。
+------------+--------------+------+-----+---------+----------------+
| 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
以保存文章。
你能看出问题所在吗?
在那种情况下,模型的 save()
方法只接受 class CodeIgniter\Entitiy
的对象。
最好的做法是 Article
扩展 class:
namespace App\Entities;
class Article extends \CodeIgniter\Entitiy
{
}
这解决了问题。