Невозможно получить, вставить данные из базы данных с помощью codeigniter 4 - PullRequest
0 голосов
/ 09 июля 2020

Я пробую новый codeigniter 4 Пытаюсь создать первое приложение, следуя инструкциям https://codeigniter.com/user_guide/tutorial/news_section.html

Мой метод контроллера для вставки данных

public function create()
{
    $model = new NewsModel();

    if (! $this->validate([
        'title' => 'required|min_length[3]|max_length[255]',
        'body'  => 'required'
    ])) {
        echo view('templates/header', ['title' => 'Create a news item']);
        echo view('news/create');
        echo view('templates/footer');
    } else {
        $model->save([
            'title' => $this->request->getVar('title'),
            'slug'  => url_title($this->request->getVar('title'), '-', true),
            'body'  => $this->request->getVar('body'),
        ]);

        echo view('news/success');
    }
}

Это повторяется страница успеха, но данные не вставляются в базу данных.

В файле .env я использовал

 database.default.hostname = localhost
 database.default.database = news_db
 database.default.username = root
 database.default.password =
 database.default.DBDriver = MySQLi

Я думаю, что соединение с базой данных работает, как проверено с неправильными деталями базы данных, оно не работает

Моя модель

<?php namespace App\Models;

use CodeIgniter\Model;

class NewsModel extends Model
{
    protected $table = 'news';

    protected $allowedFields = ['title', 'slug', 'body'];

    public function getNews($slug = false)
    {

        if ($slug === false) {
            return $this->findAll();

        }

        return $this->asArray()
            ->where(['slug' => $slug])
            ->first();
    }
}

Ответы [ 2 ]

0 голосов
/ 17 июля 2020

Я предлагаю: если вы этого не сделали, вы должны строго следовать руководству, расширив основной контроллер, потому что вы не показали этого в своем коде.

используйте CodeIgniter \ Controller;

класс News расширяет контроллер

И вы не использовали App \ Models \ NewsModel; Перед созданием экземпляра вашего класса Model. Вы можете сделать это только так, как проиллюстрировал Ali-coder. Опять же, все еще предлагая вам использовать

$ request-> getPost () вместо $ this-> request-> getVar ('title'), я предлагаю все это, потому что именно так я написал свой, и он работает хорошо.

0 голосов
/ 15 июля 2020

Ошибка, скорее всего, связана с объявлением модели в контроллере.

$model = new NewsModel();

Это должно быть пространство имен.

Попробуйте:

$model = new \App\Models\NewsModel();

или

$model = model('NewsModel');
...