$ model-> save () не использует сущность - PullRequest
0 голосов
/ 09 октября 2019

Я медленно изучаю версию 4 CodeIgniter и наткнулся на странное поведение:

При использовании метода 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, чтобы сохранить статью.

Вы видите проблему?

1 Ответ

0 голосов
/ 09 октября 2019

Оказывается, что метод save() модели принимает в этом случае только объекты класса CodeIgniter\Entitiy.

Хорошо бы сделать так, чтобы Article расширил этот класс:

namespace App\Entities;

class Article extends \CodeIgniter\Entitiy
{
}

Это решает проблему.

...