waModel

Работа с базой данных

Содержание...

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

protected $table = 'table_name';
Это ограничение не распространяется на методы exec и query.

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

protected $id = 'product_id';

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

protected $id = array('product_id', 'order_id');

Методы

public function countAll()

Возвращает количество записей в таблице.

Пример

$model = new myappModel();
$model->countAll();

Результат

156 //в таблице, имя которой указано в некотором классе модели 'myappModel', содержится всего 156 записей

public function countByField ($field, $value = null)

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

Параметры

Пример

$model = new myappModel();
$model->countByField('name', 'John');

Результат

12 //в таблице 12 записей, в поле 'name' которых указано 'John'

public function deleteByField ($field, $value = null)

Удаляет записи, значение указанного поля в которых совпадает с указанным значением.

Параметры

Пример

$model = new myappModel();
$model->deleteByField('name', 'John');

Пример

$model = new myappModel();
$model->deleteByField(array(
    'name', 'John',
    'age',  '24',
));

public function deleteById ($value)

Удаляет запись, значение поля-идентификатора которого совпадает с указанным значением во всех записях таблицы, которые необходимо удалить.

Параметры

Пример

$model = new myappModel();
$model->deleteById(123); //удаляется запись, значение поля-идентификатора (по умолчанию поля 'id') которой равно 123

public function escape ($data, $type = null)

Подготавливает данные для безопасного сохранения в базе данных.

Параметры

Пример

$model = new waModel();
$model->escape($data);

public function exec ($sql, $params = null)

Выполняет SQL-запрос, не возвращая его результат.

Параметры

Пример

$model = new waModel();
$model->exec('INSERT INTO table_name (name) VALUES (?)', $customer_name); //содержимое переменной $customer_name будет в виде строки подставлено вместо ?

Пример

$model = new waModel();
$model->exec('UPDATE table_name SET name = ? WHERE id = ?', $name, $id); //содержимое переменных $name и $id будет подставлено вместо символов ? именно в том порядке, в котором эти переменные указаны при вызове метода exec

Пример

$model = new waModel();
$data = array(
    'name' => 'John',
    'id' => 25,
);
$model->exec('UPDATE table_name SET name = s:name WHERE id = i:id', $data); //значения элементов массива $data с ключами 'name' и 'id' будут подставлены в SQL-запрос вместо плейсхолдеров с соответствующими именами; эти значения будут приведены к указанным для них типам: 'name' — строка (s:), 'id' — целое число (i:)

Пример

$model = new waModel();
$data = array(
    'name' => 'John',
    'id' => 25,
);
$model->exec('UPDATE table_name SET name = :name WHERE id = i:id', $data); //для плейсхолдера с именем 'name' не указан тип значения (:name), значит, значение для него из массива $data будет воспринято по умолчанию как строка

public function fieldExists ($field)

Проверяет наличие поля в таблице.

Параметры

Пример

$model = new myappModel();
$model->fieldExists('extra_description');

public function getAll ($key = null, $normalize = false)

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

Параметры

Примеры для этого метода приведены с учетом следующих значений:

idnameage
1John25
2Mary26
3Bill25
4Michael19
5Jane26

Пример

$model = new myappModel();
$model->getAll();

Результат

Array
(
  0 => Array
  (
    id => '1'
    name => 'John'
    age => '25'
  )
  1 => Array
  (
    id => '2'
    name => 'Mary'
    age => '26'
  )
  2 => Array
  (
    id => '3'
    name => 'Bill'
    age => '25'
  )
  3 => Array
  (
    id => '4'
    name => 'Michael'
    age => '19'
  )
  4 => Array
  (
    id => '5'
    name => 'Jane'
    age => '26'
  )
)

Пример

$model = new myappModel();
$model->getAll('id', 1); //элемент 'id' удаляется из содержимого подмассивов

Результат

Array
(
  1 => Array
  (
    name => 'John'
    age => '25'
  )
  2 => Array
  (
    name => 'Mary'
    age => '26'
  )
  3 => Array
  (
    name => 'Bill'
    age => '25'
  )
  4 => Array
  (
    name => 'Michael'
    age => '19'
  )
  5 => Array
  (
    name => 'Jane'
    age => '26'
  )
)

Пример

$model = new myappModel();
$model->getAll('age', 2); //значения группируются по содержимому поля 'age'

Результат

Array
(
  25 => Array
  (
    0 => Array
    (
      id => '1'
      name => 'John'
    )
    1 => Array
    (
      id => '3'
      name => 'Bill'
    )
  )
  26 => Array
  (
    0 => Array
    (
      id => '2'
      name => 'Mary'
    )
    1 => Array
    (
      id => '5'
      name => 'Jane'
    )
  )
  19 => Array
  (
    0 => Array
    (
      id => '4'
      name => 'Michael'
    )
  )
)

public function getByField ($field, $value = null, $all = false, $limit = false)

Возвращает содержимое записей, значение указанного поля в которых совпадает с указанным значением. Допускается 2 режима передачи параметров: для одинарного значения и для массива значений.

Параметры (для одинарного значения)

Параметры (для массива значений)

Пример

$model = new myappModel();
$model->getByField('age', 25, true, 10); //вернуть первые 10 записей, в которых значение поля 'age' равно 25

Пример

$model = new myappModel();
$data = array(
    'age' => 25,
    'name' => 'John',
);
$model->getByField($data, true); //вернуть все записи с указанными значениями полей

public function getById ($value)

Возвращает содержимое записей с указанным значением поля-идентификатора.

Параметры

Пример

$model = new myappModel();
$model->getById(4);

public function getEmptyRow()

Возвращает массив, соответствующим всем полям таблицы и содержащий значения полей по умолчанию.

Пример

$model = new myappModel();
$model->getEmptyRow();

Результат

Array
(
  id => ''
  name => ''
  age => ''
)

public function getTableId()

Возвращает название поля-идентификатора таблицы модели.

Пример

$model = new myappModel();
$model->getTableId();

Результат

id //название поля-идентификатора, используемое по умолчанию, если иное не определено в классе модели

public function getTableName()

Возвращает имя таблицы, определенное в классе модели.

Пример

$model = new myappModel();
$model->getTableName();

public function insert ($data, $type = 0)

Добавляет запись с указанными значениями.

Параметры

Пример

$model = new myappModel();
$data = array(
    'id' => 6,
    'age' => 25,
    'name' => 'John',
);
$model->insert($data, 1);

public function multipleInsert ($data)

Добавляет несколько записей с указанными значениями.

Параметры (отдельно для каждой записи)

Пример

$model = new myappModel();
$data = array(
    array(
        'name' => 'bag',
        'color' => 'red',
    ),
    array(
        'name' => 'bag',
        'color' => 'green',
    ),
    array(
        'name' => 'bag',
        'color' => 'blue',
    ),
);
$model->multipleInsert($data); //будут вставлены 3 записи, соответствующие элементам массива

Пример

$model = new myappModel();
$data = array(
    'name' => 'bag',
    'color' => array(
        'red',
        'green',
        'blue',
    ),
);
$model->multipleInsert($data); //будут вставлены 3 записи, соответствующие значениям элемента 'color'; значение 'name' у всех этих записей будет одинаковым

public function ping()

Восстанавливает подключение к серверу баз данных в случае его прерывания.

Пример

$model = new myappModel();
$model->ping();

public function query ($sql)

Выполняет запрос к базе данных и возвращает результат в виде экземпляра класса waDbResultSelect, waDbResultInsert, waDbResultUpdate, waDbResultDelete или waDbResultReplace. Для доступа к значениям результата SQL-запроса необходим вызов публичных методов класса, соответствующего типу выполненного запроса.

Параметры

Пример

$model = new waModel();
$model->query('SELECT * FROM table_name')->fetchAll() //метод fetchAll допустим для получения результатов запроса типа 'SELECT', потому что описан в классе waDbResultSelect;
//в частности, этот метод возвращает массив значений, извлеченных указанным SQL-запросом, которые можно использовать в PHP-коде

public function replace ($data)

Заменяет запись в таблице с помощью SQL-оператора REPLACE.

Параметры

Пример

$model = new myappModel();
$data = array(
    array(
        'item_id' => 18,
        'order_id' => 984,
    ),
);
$model->replace($data);

public function updateByField ($field, $value, $data = null, $options = null, $return_object = false)

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

Параметры (проверка значений одного поля)

Параметры (проверка значений нескольких полей)

Пример

$model = new myappModel();
$model->updateByField('name', 'John', array('name' => 'Johnny')); //в поле 'name' значения 'John' заменить на 'Johnny'

Пример

$model = new myappModel();
$values = array(
    'John',
    'Johnny',
);
$data = array(
    'mood' => 'bright',
);
$model->updateByField('name', $values, $data); //для записей, в которых значение 'name' равно 'John' или 'Johnny', заменить значение поля 'mood' на 'bright'

Пример

$model = new myappModel();
$fields = array(
    'name' => 'John',
    'age' => 25,
);
$data = array(
    'mood' => 'bright',
);
$model->updateByField($fields, $data); //для записей, в которых значение 'name' равно 'John', а значение 'age' равно 25, заменить значение поля 'mood' на 'bright'

public function updateById ($id, $data, $options = null, $return_object = false)

Обновляет содержимое записи с указанным значением идентификатора.

Параметры

Пример

$model = new myappModel();
$data = array(
    'name' => 'John',
    'age' => 25,
);
$model->updateById(6, $data);