#php #codeigniter-4
#php #codeigniter-4
Вопрос:
Я изучаю CodeIgniter4, и я застрял при использовании функции findAll(), в ней написано следующее: mysqli_sql_exception #1054 Неизвестный столбец ‘cursos.удален_ат’ в ‘предложении where’
<?php namespace AppModels;
use CodeIgniterModel;
class Codigofacilito_model extends Model
{
protected $table = 'cursos';
protected $primaryKey = 'idCurso';
protected $returnType = 'array';
protected $useSoftDeletes = true;
protected $allowedFields = ['nombreCurso','videosCurso'];
protected $useTimestamps = false;
protected $createdField = 'created_at';
protected $updatedField = 'updated_at';
protected $deletedField = 'deleted_at';
protected $validationRules = [];
protected $validationMessages = [];
protected $skipValidation = false;
function __construct()
{
if (is_callable('parent::__construct')) {
parent::__construct();
}
}
function crearCurso($arr)
{
$this->insert
(array(
'nombreCurso' => $arr['nombre'],
'videosCurso' => $arr['videos']
)
);
}
}
Контроллер:
<?php namespace AppControllers;
use AppModelscodigofacilito_model;
class Cursos extends BaseController{
function __construct(){
if (is_callable('parent::__construct')) {
parent::__construct();
}
helper('form');
}
function index(){
$modelo1=new Codigofacilito_model($db);
$data=$modelo1->findAll();
echo view('codigofacilito/headers');
echo view('cursos/cursos',$data);
}
}
Соединение правильное, и все имена таблиц и другие правильные.
Комментарии:
1. Убедитесь, что вы не используете магический метод __construct в своих контроллерах. Вместо этого используйте метод initController, предоставленный в вашем BaseController.
Ответ №1:
Поскольку в ошибке указано deleted_at
, что в вашей cursos
таблице отсутствует столбец.
Здесь вы рассказали Codeigniter две важные вещи :
- Когда
protected $useSoftDeletes = true;
вы говорите ему: я не хочу использовать оператор SQL delete, вместо этого обновитеdeleted_at
поле
Обратите внимание, что этоdeleted_at
может быть либо формат даты (формат, который вы можете указать с$dateFormat
помощью параметра в вашей модели), либо ЦЕЛОЕ ЧИСЛО. - С
protected $deletedField = 'deleted_at';
помощью этого параметра вы устанавливаете имя поля, которое будет использоваться при программном удалении.
Ваша ошибка обнаруживается при вызове findAll()
метода, поскольку фреймворк отфильтрует записи до тех, которые не были удалены программно, используя имя поля, которое вы ему предоставили.
Поэтому, если вы хотите устранить свою ошибку, либо добавьте deleted_at
столбец в свою таблицу, либо измените $deletedField
значение с помощью вашего столбца soft delete, который уже существует.
Для получения дополнительной информации о конфигурации модели CI4: https://codeigniter.com/user_guide/models/model.html#configuring-your-model
Кроме того, поскольку у вас есть $useTimestamps = false, вам не нужно задавать имя для created_at и updated_at .