model - $model->save() 不使用实体
问题描述
我正在慢慢学习 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
来保存文章。
你能看出问题吗?
解决方案
事实证明,在这种情况下save()
,模型的方法只接受类CodeIgniter\Entitiy
的对象。
要做的好事是Article
扩展该类:
namespace App\Entities;
class Article extends \CodeIgniter\Entitiy
{
}
这解决了问题。
推荐阅读
- python - 如何让scrapy跟随无效链接?
- azure - ADFv2:如何在设置后删除与 GIT 存储库的连接?
- sql-server - SQL Server Reporting Services 从 SSRS 生成的报告订阅中导出单独的 PDF
- javascript - Firebase 错误:运行 Jest 测试时浏览器不受支持
- php - Kubernetes 命名空间环境标头
- css - 更改 FontAwesome 跨度图标的悬停颜色
- reactjs - Intellij 发现路径不适用于反应项目中的公共/脚本
- python - 使用 matplotlib 和 pandas 用虚线创建事件的时间图
- android - 在 rxjava2 中的异步请求完成之前调用订阅者 onNext
- php - 检查 PHP 中的路径遍历并允许使用未损坏的非现有路径