【问题标题】:$model->save() doesn't use entity$model->save() 不使用实体
【发布时间】:2020-02-06 12:09:36
【问题描述】:

我正在慢慢学习 CodeIgniter 的第 4 版,我偶然发现了一个奇怪的行为:

当使用我模型的save() 方法时,它只保存created_atupdated_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 来保存文章。

你能看出问题吗?

【问题讨论】:

    标签: model entities codeigniter-4


    【解决方案1】:

    在这种情况下,模型的save() 方法只接受CodeIgniter\Entitiy 类的对象。

    最好的做法是让Article 扩展该类:

    namespace App\Entities;
    
    class Article extends \CodeIgniter\Entitiy
    {
    }
    

    这样就解决了问题。

    【讨论】:

      猜你喜欢
      • 2020-01-30
      • 1970-01-01
      • 2014-10-20
      • 2019-06-06
      • 1970-01-01
      • 2015-11-23
      • 2020-03-26
      • 2023-03-15
      • 1970-01-01
      相关资源
      最近更新 更多