Использование моделей в CodeIgniter

Модели

Модели предоставляют способ взаимодействия с определенной таблицей в вашей базе данных. Они входят в стандартную комплектацию со вспомогательными методами для большинства стандартных способов взаимодействия с таблицей базы данных, включая поиск записей, обновление записей, удаление записей и многое другое.

Доступ к моделям

Модели обычно хранятся в app/Modelsкаталоге. У них должно быть пространство имен, соответствующее их расположению в каталоге, например .namespace App\Models

Вы можете получить доступ к моделям в своих классах, создав новый экземпляр или используя model()вспомогательную функцию.

// Create a new class manually
$userModel = new \App\Models\UserModel();

// Create a new class with the model function
$userModel = model('App\Models\UserModel', false);

// Create a shared instance of the model
$userModel = model('App\Models\UserModel');

// Create shared instance with a supplied database connection
// When no namespace is given, it will search through all namespaces
// the system knows about and attempt to located the UserModel class.
$db = db_connect('custom');
$userModel = model('UserModel', true, $db);

Модель CodeIgniter

CodeIgniter предоставляет класс модели, который предоставляет несколько полезных функций, в том числе:

  • автоматическое подключение к базе данных
  • основные методы CRUD
  • проверка в модели
  • автоматическая разбивка на страницы
  • и больше

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

Создание вашей модели

Чтобы воспользоваться преимуществами модели CodeIgniter, вы должны просто создать новый класс модели, который расширяется CodeIgniter\Model:

<?php namespace App\Models;

use CodeIgniter\Model;

class UserModel extends Model
{

}

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

Подключение к базе данных

При первом создании экземпляра класса, если конструктору не передается экземпляр подключения к базе данных, он автоматически подключается к группе базы данных по умолчанию, как установлено в конфигурации. Вы можете изменить, какая группа используется для каждой модели, добавив свойство DBGroup в свой класс. Это гарантирует, что в модели любые ссылки на нее $this->dbбудут делаться через соответствующее соединение.

<?php namespace App\Models;

use CodeIgniter\Model;

class UserModel extends Model
{
    protected $DBGroup = 'group_name';
}

Вы бы заменили «group_name» на имя определенной группы базы данных из файла конфигурации базы данных.

Настройка вашей модели

Класс модели имеет несколько параметров конфигурации, которые можно настроить, чтобы методы класса работали на вас без проблем. Первые два используются всеми методами CRUD, чтобы определить, какую таблицу использовать и как мы можем найти необходимые записи:

<?php namespace App\Models;

use CodeIgniter\Model;

class UserModel extends Model
{
    protected $table      = 'users';
    protected $primaryKey = 'id';

    protected $returnType     = 'array';
    protected $useSoftDeletes = true;

    protected $allowedFields = ['name', 'email'];

    protected $useTimestamps = false;
    protected $createdField  = 'created_at';
    protected $updatedField  = 'updated_at';
    protected $deletedField  = 'deleted_at';

    protected $validationRules    = [];
    protected $validationMessages = [];
    protected $skipValidation     = false;
}

$ таблица

Задает таблицу базы данных, с которой в первую очередь работает эта модель. Это относится только к встроенным методам CRUD. Вы не ограничены использованием только этой таблицы в своих собственных запросах.

$ primaryKey

Это имя столбца, который однозначно определяет записи в этой таблице. Это не обязательно должно соответствовать первичному ключу, указанному в базе данных, но используется с такими методами, как find()определение столбца, которому соответствует указанное значение.

Заметка

Для всех моделей должен быть указан primaryKey, чтобы все функции работали должным образом.

$ returnType

CRUD-методы модели отвлекутся от вас и автоматически вернут полученные данные вместо объекта Result. Этот параметр позволяет вам определить тип возвращаемых данных. Допустимые значения: «массив», «объект» или полное имя класса, которое можно использовать с методом getCustomResultObject () объекта Result.

$ useSoftDeletes

Если true, то любые вызовы метода delete * будут установлены deleted_atв базе данных вместо фактического удаления строки. Это может сохранить данные, когда на них могут быть ссылки в другом месте, или может поддерживать «корзину» объектов, которые могут быть восстановлены, или даже просто сохранить их как часть следа безопасности. Если true, методы find * будут возвращать только не удаленные строки, если только метод withDeleted () не вызывается до вызова метода find *.

Для этого требуется поле DATETIME или INTEGER в базе данных в соответствии с параметром модели $ dateFormat. Имя поля по умолчанию, deleted_atоднако, это имя может быть настроено на любое имя по вашему выбору с помощью свойства $ deletedField.

$ allowedFields

Этот массив должен быть обновлен именами полей, которые можно задать во время методов сохранения, вставки или обновления. Любые имена полей, кроме этих, будут отброшены. Это помогает защититься от простого ввода данных из формы и использования всего этого в модели, что может привести к потенциальным уязвимостям массового назначения.

$ useTimestamps

Это логическое значение определяет, будет ли текущая дата автоматически добавляться ко всем вставкам и обновлениям. Если true, установит текущее время в формате, указанном в $ dateFormat. Для этого необходимо, чтобы в таблице были столбцы с именами created_at и updated_at в соответствующем типе данных.

$ createdField

Указывает, какое поле базы данных следует использовать для сохранения отметки времени создания записи данных. Оставьте поле пустым, чтобы не обновлять его (даже если включен параметр useTimestamps)

$ updatedField

Указывает, какое поле базы данных следует использовать для хранения отметки времени обновления записи данных. Оставьте поле пустым, чтобы не обновлять его (даже если включен параметр useTimestamps)

$ dateFormat

Это значение работает с $ useTimestamps и $ useSoftDeletes, чтобы гарантировать, что в базу данных будет вставлен правильный тип значения даты. По умолчанию это создает значения DATETIME, но допустимые варианты: datetime, date или int (временная метка PHP). Использование useSoftDeletes или useTimestamps с недопустимым или отсутствующим dateFormat вызовет исключение.

$ validationRules

Содержит либо массив правил проверки, как описано в разделе Как сохранить правила, либо строку, содержащую имя группы проверки, как описано в том же разделе. Более подробно описано ниже.

$ validationMessages

Содержит массив настраиваемых сообщений об ошибках, которые следует использовать во время проверки, как описано в разделе «Настройка настраиваемых сообщений об ошибках» . Более подробно описано ниже.

$ skipValidation

Следует ли пропускать валидацию при всех insertsи updates. Значение по умолчанию — false, что означает, что данные всегда будут пытаться проверить. Это в основном используется skipValidation()методом, но может быть изменено на, trueпоэтому эта модель никогда не будет проверяться.

$ beforeInsert $ afterInsert $ beforeUpdate $ afterUpdate $ afterFind $ afterDelete

Эти массивы позволяют указать методы обратного вызова, которые будут выполняться с данными в момент времени, указанный в имени свойства.

$ allowCallbacks

Следует ли использовать указанные выше обратные вызовы.

Работа с данными

Поиск данных

Для выполнения базовой работы CRUD с вашими таблицами предусмотрено несколько функций, включая find (), insert (), update (), delete () и другие.

найти()

Возвращает одну строку, в которой первичный ключ соответствует значению, переданному в качестве первого параметра:

$user = $userModel->find($user_id);

Значение возвращается в формате, указанном в $ returnType.

Вы можете указать более одной строки для возврата, передав массив значений primaryKey вместо одной:

$users = $userModel->find([1,2,3]);

Если параметры не переданы, вернет все строки в таблице этой модели, эффективно действуя как findAll (), хотя и менее явно.

findColumn ()

Возвращает null или индексированный массив значений столбца:

$user = $userModel->findColumn($column_name);

$ column_name должно быть именем одного столбца, иначе вы получите DataException.

найти все()

Возвращает все результаты:

$users = $userModel->findAll();

Этот запрос можно изменить, вставив при необходимости команды построителя запросов перед вызовом этого метода:

$users = $userModel->where('active', 1)
                   ->findAll();

Вы можете передать значения предела и смещения в качестве первого и второго параметров соответственно:

$users = $userModel->findAll($limit, $offset);

первый()

Возвращает первую строку в наборе результатов. Лучше всего использовать его в сочетании с построителем запросов.

$user = $userModel->where('deleted', 0)
                  ->first();

withDeleted ()

Если $ useSoftDeletes истинно, тогда методы find * не будут возвращать строки, в которых «deleted_at IS NOT NULL». Чтобы временно отменить это, вы можете использовать метод withDeleted () перед вызовом метода find *.

// Only gets non-deleted rows (deleted = 0)
$activeUsers = $userModel->findAll();

// Gets all rows
$allUsers = $userModel->withDeleted()
                      ->findAll();

onlyDeleted ()

В то время как withDeleted () возвращает как удаленные, так и не удаленные строки, этот метод изменяет следующие методы find * для возврата только мягко удаленных строк:

$deletedUsers = $userModel->onlyDeleted()
                          ->findAll();

Сохранение данных

вставить ()

В этот метод передается ассоциативный массив данных в качестве единственного параметра для создания новой строки данных в базе данных. Ключи массива должны соответствовать имени столбцов в таблице $, а значения массива — это значения, которые нужно сохранить для этого ключа:

$data = [
    'username' => 'darth',
    'email'    => 'd.vader@theempire.com'
];

$userModel->insert($data);

Обновить()

Обновляет существующую запись в базе данных. Первый параметр — это $ primaryKey записи, которую нужно обновить. В качестве второго параметра в этот метод передается ассоциативный массив данных. Ключи массива должны соответствовать имени столбцов в таблице $, а значения массива — это значения, которые нужно сохранить для этого ключа:

$data = [
    'username' => 'darth',
    'email'    => 'd.vader@theempire.com'
];

$userModel->update($id, $data);

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

$data = [
    'active' => 1
];

$userModel->update([1, 2, 3], $data);

Если вам нужно более гибкое решение, вы можете оставить параметры пустыми, и оно будет работать как команда обновления построителя запросов, с дополнительным преимуществом проверки, событий и т. Д .:

$userModel
    ->whereIn('id', [1,2,3])
    ->set(['active' => 1])
    ->update();

спасти()

Это оболочка вокруг методов insert () и update (), которые обрабатывают вставку или обновление записи автоматически, в зависимости от того, найдет ли он ключ массива, соответствующий значению $ primaryKey:

// Defined as a model property
$primaryKey = 'id';

// Does an insert()
$data = [
    'username' => 'darth',
    'email'    => 'd.vader@theempire.com'
];

$userModel->save($data);

// Performs an update, since the primary key, 'id', is found.
$data = [
    'id'       => 3,
    'username' => 'darth',
    'email'    => 'd.vader@theempire.com'
];
$userModel->save($data);

Метод save также может значительно упростить работу с объектами результатов настраиваемого класса, распознавая непростой объект и захватывая его общедоступные и защищенные значения в массив, который затем передается в соответствующий метод вставки или обновления. Это позволяет вам работать с классами Entity очень чисто. Классы сущностей — это простые классы, которые представляют один экземпляр типа объекта, например пользователя, сообщение в блоге, работу и т. Д. Этот класс отвечает за поддержку бизнес-логики, окружающей сам объект, например, элементы форматирования определенным образом и т. Д. Они не должны иметь представления о том, как они сохраняются в базе данных. В простейшем случае они могут выглядеть так:

namespace App\Entities;

class Job
{
    protected $id;
    protected $name;
    protected $description;

    public function __get($key)
    {
        if (property_exists($this, $key))
        {
            return $this->$key;
        }
    }

    public function __set($key, $value)
    {
        if (property_exists($this, $key))
        {
            $this->$key = $value;
        }
    }
}

Очень простая модель для работы с этим может выглядеть так:

use CodeIgniter\Model;

class JobModel extends Model
{
    protected $table = 'jobs';
    protected $returnType = '\App\Entities\Job';
    protected $allowedFields = [
        'name', 'description'
    ];
}

Эта модель работает с данными из jobsтаблицы и возвращает все результаты в виде экземпляра App\Entities\Job. Если вам нужно сохранить эту запись в базе данных, вам нужно будет либо написать собственные методы, либо использовать метод модели save()для проверки класса, получения любых общедоступных и частных свойств и сохранения их в базе данных:

// Retrieve a Job instance
$job = $model->find(15);

// Make some changes
$job->name = "Foobar";

// Save the changes
$model->save($job);

Заметка

Если вы обнаружите, что много работаете с Entities, CodeIgniter предоставляет встроенный класс Entity, который предоставляет несколько удобных функций, упрощающих разработку Entities.

Удаление данных

удалять()

Принимает значение первичного ключа в качестве первого параметра и удаляет соответствующую запись из таблицы модели:

$userModel->delete(12);

Если значение модели $ useSoftDeletes истинно, это обновит строку, чтобы установить deleted_atтекущие дату и время. Вы можете принудительно удалить навсегда, установив для второго параметра значение true.

Массив первичных ключей можно передать в качестве первого параметра для одновременного удаления нескольких записей:

$userModel->delete([1,2,3]);

Если параметры не переданы, он будет действовать как метод удаления конструктора запросов, требующий ранее вызова where:

$userModel->where('id', 12)->delete();

purgeDeleted ()

Очищает таблицу базы данных, окончательно удаляя все строки, в которых «deleted_at IS NOT NULL».

$userModel->purgeDeleted();

Проверка данных

Для многих людей проверка данных в модели является предпочтительным способом обеспечить соответствие данных единому стандарту без дублирования кода. Класс Модель обеспечивает возможность автоматического иметь все данные , подтвержденные до сохранения в базу данных с insert()update()или save()методов.

Первый шаг — заполнить $validationRulesсвойство класса полями и правилами, которые следует применить. Если у вас есть собственное сообщение об ошибке, которое вы хотите использовать, поместите его в $validationMessagesмассив:

class UserModel extends Model
{
    protected $validationRules    = [
        'username'     => 'required|alpha_numeric_space|min_length[3]',
        'email'        => 'required|valid_email|is_unique[users.email]',
        'password'     => 'required|min_length[8]',
        'pass_confirm' => 'required_with[password]|matches[password]'
    ];

    protected $validationMessages = [
        'email'        => [
            'is_unique' => 'Sorry. That email has already been taken. Please choose another.'
        ]
    ];
}

Другой способ установить правила проверки для полей по функциям,setValidationRule$ field , $ fieldRules )

Параметры:$ field ( строка ) —$ fieldRules ( массив ) —

Эта функция установит правила проверки полей.

Пример использования:

$fieldName = 'username';
$fieldRules = 'required|alpha_numeric_space|min_length[3]';

$model->setValidationRule($fieldName, $fieldRules);

setValidationRules$ validationRules )

Параметры:$ validationRules ( массив ) —

Эта функция установит правила проверки.

Пример использования:

$validationRules = [
    'username' => 'required|alpha_numeric_space|min_length[3]',
    'email' => [
        'rules'  => 'required|valid_email|is_unique[users.email]',
        'errors' => [
            'required' => 'We really need your email.',
        ],
    ],
];
$model->setValidationRules($validationRules);

Другой способ установить сообщение проверки для полей по функциям,setValidationMessage$ field , $ fieldMessages )

Параметры:$ field ( строка ) —$ fieldMessages ( массив ) —

Эта функция устанавливает полевые сообщения об ошибках.

Пример использования:

$fieldName = 'name';
$fieldValidationMessage = [
    'required' => 'Your name is required here',
];
$model->setValidationMessage($fieldName, $fieldValidationMessage);

setValidationMessages$ fieldMessages )

Параметры:$ fieldMessages ( массив ) —

Эта функция установит поля сообщений.

Пример использования:

$fieldValidationMessage = [
    'name' => [
        'required'   => 'Your baby name is missing.',
        'min_length' => 'Too short, man!',
    ],
];
$model->setValidationMessages($fieldValidationMessage);

Теперь, когда вы называете insert()update()или save()методы, данные будут проверены. В случае неудачи модель вернет логическое значение false . Вы можете использовать этот errors()метод для получения ошибок проверки:

if ($model->save($data) === false)
{
    return view('updateUser', ['errors' => $model->errors()]);
}

Это возвращает массив с именами полей и связанными с ними ошибками, который можно использовать либо для отображения всех ошибок в верхней части формы, либо для отображения их по отдельности:

<?php if (! empty($errors)) : ?>
    <div class="alert alert-danger">
    <?php foreach ($errors as $field => $error) : ?>
        <p><?= $error ?></p>
    <?php endforeach ?>
    </div>
<?php endif ?>

Если вы предпочитаете систематизировать свои правила и сообщения об ошибках в файле конфигурации проверки, вы можете сделать это и просто указать $validationRulesимя созданной вами группы правил проверки:

class UserModel extends Model
{
    protected $validationRules = 'users';
}

Получение правил проверки

Вы можете получить правила проверки модели, открыв ее validationRules свойство:

$rules = $model->validationRules;

Вы также можете получить только подмножество этих правил, напрямую вызвав метод доступа с параметрами:

$rules = $model->getValidationRules($options);

$optionsПараметр представляет собой ассоциативный массив с одним элементом, чей ключ либо «кроме» или «только», и который имеет в качестве своего значения массив имен полей , представляющих интерес .:

// get the rules for all but the "username" field
$rules = $model->getValidationRules(['except' => ['username']]);
// get the rules for only the "city" and "state" fields
$rules = $model->getValidationRules(['only' => ['city', 'state']]);

Заполнители для проверки

Модель предоставляет простой метод для замены частей ваших правил на основе данных, которые в нее передаются. Это звучит довольно непонятно, но может быть особенно удобно с is_uniqueправилом проверки. Заполнители — это просто имя поля (или ключа массива), которое было передано как $ data, окруженное фигурными скобками. Он будет заменен значением соответствующего входящего поля. Пример должен прояснить это:

protected $validationRules = [
    'email' => 'required|valid_email|is_unique[users.email,id,{id}]'
];

В этом наборе правил говорится, что адрес электронной почты должен быть уникальным в базе данных, за исключением строки, идентификатор которой соответствует значению заполнителя. Предполагая, что данные формы POST имели следующее:

$_POST = [
    'id' => 4,
    'email' => 'foo@example.com'
];

тогда {id}заполнитель будет заменен цифрой 4 , давая это измененное правило:

protected $validationRules = [
    'email' => 'required|valid_email|is_unique[users.email,id,4]'
];

Таким образом, он проигнорирует строку в базе данных, которая есть id=4при проверке уникальности электронного письма.

Это также можно использовать для создания более динамических правил во время выполнения, если вы позаботитесь о том, чтобы любые переданные динамические ключи не конфликтовали с данными вашей формы.

Защита полей

Чтобы защитить себя от атак массового присвоения, класс модели требует, чтобы вы перечислили все имена полей, которые могут быть изменены во время вставок и обновлений в $allowedFieldsсвойстве класса. Любые данные, предоставленные в дополнение к этим, будут удалены до попадания в базу данных. Это отлично подходит для обеспечения того, чтобы временные метки или первичные ключи не менялись.

protected $allowedFields = ['name', 'email', 'address'];

Иногда вы обнаружите, что вам нужно изменить эти элементы. Часто это происходит во время испытаний, миграций или семян. В этих случаях вы можете включить или выключить защиту:

$model->protect(false)
      ->insert($data)
      ->protect(true);

Работа с построителем запросов

Вы можете получить доступ к общему экземпляру Query Builder для подключения к базе данных этой модели в любое время, когда вам это понадобится:

$builder = $userModel->builder();

Этот конструктор уже настроен с помощью таблицы $ модели.

Вы также можете использовать методы Query Builder и CRUD-методы модели в одном и том же последовательном вызове, что обеспечивает очень элегантное использование:

$users = $userModel->where('status', 'active')
                   ->orderBy('last_login', 'asc')
                   ->findAll();

Заметка

Вы также можете легко получить доступ к подключению к базе данных модели:

$user_name = $userModel->escape($name);

Изменения типа возврата среды выполнения

Вы можете указать формат, в котором должны быть возвращены данные, при использовании методов find * () в качестве свойства класса $ returnType. Однако могут быть случаи, когда вы захотите вернуть данные в другом формате. Модель предоставляет методы, которые позволяют вам это делать.

Заметка

Эти методы изменяют только возвращаемый тип для следующего вызова метода find * (). После этого он сбрасывается до значения по умолчанию.

asArray ()

Возвращает данные из следующего метода find * () в виде ассоциативных массивов:

$users = $userModel->asArray()->where('status', 'active')->findAll();

asObject ()

Возвращает данные из следующего метода find * () как стандартные объекты или значения пользовательского класса:

// Return as standard objects
$users = $userModel->asObject()->where('status', 'active')->findAll();

// Return as custom class instances
$users = $userModel->asObject('User')->where('status', 'active')->findAll();

Обработка больших объемов данных

Иногда вам нужно обработать большие объемы данных, и возникает риск нехватки памяти. Чтобы упростить это, вы можете использовать метод chunk () для получения меньших фрагментов данных, с которыми вы затем сможете работать. Первый параметр — это количество строк, извлекаемых в одном блоке. Второй параметр — это закрытие, которое будет вызываться для каждой строки данных.

Лучше всего использовать это во время cronjobs, экспорта данных или других больших задач.

$userModel->chunk(100, function ($data)
{
    // do something.
    // $data is a single row of data.
});

События модели

В выполнении модели есть несколько точек, в которых вы можете указать несколько методов обратного вызова для запуска. Эти методы можно использовать для нормализации данных, хеш-паролей, сохранения связанных сущностей и многого другого. Следующие точки выполнения модели могут быть затронуты, каждая через свойство класса: $ beforeInsert , $ afterInsert , $ beforeUpdate , afterUpdate , afterFind и afterDelete .

Определение обратных вызовов

Вы указываете обратные вызовы, сначала создавая новый метод класса в своей модели для использования. Этот класс всегда будет получать массив $ data в качестве единственного параметра. Точное содержимое массива $ data будет различаться в зависимости от события, но всегда будет содержать ключ с именем data, который содержит первичные данные, переданные исходному методу. В случае методов insert * или update * это будут пары ключ / значение, которые вставляются в базу данных. Основной массив также будет содержать другие значения, переданные в метод, которые будут подробно описаны позже. Метод обратного вызова должен возвращать исходный массив $ data, чтобы другие обратные вызовы имели полную информацию.

protected function hashPassword(array $data)
{
    if (! isset($data['data']['password']) return $data;

    $data['data']['password_hash'] = password_hash($data['data']['password'], PASSWORD_DEFAULT);
    unset($data['data']['password'];

    return $data;
}

Определение обратных вызовов для запуска

Вы указываете, когда запускать обратные вызовы, добавляя имя метода к соответствующему свойству класса (beforeInsert, afterUpdate и т. Д.). К одному событию можно добавить несколько обратных вызовов, и они будут обрабатываться один за другим. Вы можете использовать один и тот же обратный вызов в нескольких событиях:

protected $beforeInsert = ['hashPassword'];
protected $beforeUpdate = ['hashPassword'];

Кроме того, каждая модель может разрешать (по умолчанию) или запрещать обратные вызовы для всего класса, задав свойство $ allowCallbacks:

protected $allowCallbacks = false;

Вы также можете временно изменить этот параметр для одного вызова модели с помощью allowCallbacks()метода:

$model->allowCallbacks(false)->find(1); // No callbacks triggered
$model->find(1);                        // Callbacks subject to original property value

Параметры события

Поскольку точные данные, передаваемые каждому обратному вызову, немного различаются, вот подробности того, что находится в параметре $ data, передаваемом каждому событию:

Событие$ data content
beforeInsertdata = пары ключ / значение, которые вставляются. Если объект или класс Entity передается методу вставки, он сначала преобразуется в массив.
afterInsertid = первичный ключ новой строки или 0 в случае ошибки. data = вставляемые пары ключ / значение. result = результаты метода insert (), использованного в построителе запросов.
beforeUpdateid = первичный ключ обновляемой строки. data = пары ключ / значение, которые вставляются. Если объект или класс Entity передается методу вставки, он сначала преобразуется в массив.
afterUpdateid = первичный ключ обновляемой строки. data = обновляемая пара ключ / значение. result = результаты метода update (), использованного в построителе запросов.
afterFindЗависит от метода поиска *. См. Следующее:
найти()id = первичный ключ поисковой строки. data = Результирующая строка данных или null, если результат не найден.
найти все()data = результирующие строки данных или null, если результат не найден. limit = количество строк для поиска. смещение = количество строк, которые нужно пропустить во время поиска.
первый()data = результирующая строка, найденная во время поиска, или null, если ничего не найдено.
beforeDeleteЗависит от метода удаления *. См. Следующее:
удалять()id = первичный ключ удаляемой строки. purge = boolean, следует ли удалять строки с мягким удалением без возможности восстановления.
afterDeleteЗависит от метода удаления *. См. Следующее:
удалять()id = первичный ключ удаляемой строки. purge = boolean, следует ли удалять строки с мягким удалением без возможности восстановления. result = результат вызова delete () в построителе запросов. данные = не используются.

Создание модели вручную

Вам не нужно расширять какой-либо специальный класс для создания модели вашего приложения. Все, что вам нужно, это получить экземпляр подключения к базе данных, и все готово. Это позволяет вам обойти функции, которые CodeIgniter Model предлагает вам из коробки, и создать полностью настраиваемый интерфейс.

<?php namespace App\Models;

use CodeIgniter\Database\ConnectionInterface;

class UserModel
{
    protected $db;

    public function __construct(ConnectionInterface &$db)
    {
        $this->db =& $db;
    }
}

следующий  Предыдущий

Добавить комментарий