Настройка для работы с БД

Комментарии: 10  Просмотры: 27 945

Несмотря на то, что большая часть сайтов сегодня использует базу данных (иногда даже не одну), в некоторых случаях можно обойтись без нее. Сайт, на котором присутствует редко изменяемая информация (например, сайт-визитка) обычно организуют с помощью нескольких статичных страниц. Также в качестве источника для хранения информации можно использовать файлы. Именно поэтому в Кохане изначально отключена библиотека для работы с базой, но она конечно же включена в сборку в качестве официального модуля. Настройка работы этого модуля ничем не отличается от настройки других модулей, находящихся в папке modules. А как вы помните, для подключения модуля нужно просто раскомментировать строчку с его названием в файле bootstrap.php:

/**
 * Enable modules. Modules are referenced by a relative or absolute path.
 */
Kohana::modules(array(
    ....
    'database'   => MODPATH.'database',   // Database access
    ...
    ));

Модуль ORM пока не трогайте. Отдельные уроки по нему будут обязательно, просто чуть позже. Вообще я считаю, что все нужно изучать постепенно. Да, это считается крутым и модным, но тут как в случае с ООП. Когда видишь как новичек на каждый чих создает класс, становится грустно. Так и ORM нужно использовать осторожно. Напихают вызовы в цикл и не знают, что на каждый вызов создается «select» (каким злом являются селекты в цикле объяснять не нужно).
Идем дальше. Чтобы использовать базу данных, ее нужно конечно создать. Как это сделать, я рассказывать не буду, потому что если вы этого не знаете, то вам рано браться за изучение фреймворка.
Следующее, что нужно сделать — отредактировать конфигурационный файл, где необходимо прописать настройки доступа к свежесозданной базе. Но поскольку в папке modules править ничего нельзя, для этого у нас есть «наша» папка application, то конфигурационный файл нужно туда скопировать. Продублируйте файл database.php из «modules/database/config/» в «application/config/» и откройте его. На данный момент нас интересует только соединение default, т.е. вот эта часть кода:

	'default' => array
	(
		'type'       => 'mysql',
		'connection' => array(
			/**
			 * The following options are available for MySQL:
			 *
			 * string   hostname     server hostname, or socket
			 * string   database     database name
			 * string   username     database username
			 * string   password     database password
			 * boolean  persistent   use persistent connections?
			 * array    variables    system variables as "key => value" pairs
			 *
			 * Ports and sockets may be appended to the hostname.
			 */
			'hostname'   => 'localhost',
			'database'   => 'kohana',
			'username'   => FALSE,
			'password'   => FALSE,
			'persistent' => FALSE,
		),
		'table_prefix' => '',
		'charset'      => 'utf8',
		'caching'      => FALSE,
		'profiling'    => TRUE,
	),

Ниже имеется еще одно соединение — alternate, которое также можно использовать. Вообще таких соединений можно создать сколько угодно, если вы используете несколько баз данных. Тогда, в отличие от дефолтной базы, нам прийдется указывать ее название в запросах.
Но вернемся к настройкам соединения default. Параметр type в первой строке массива — тип СУБД. В нашем случае это «mysql». Скорее всего у вас используется именно она, поэтому здесь ничего менять ненужно. Следом идет параметр connection, отвечающий за настройки соединения с БД. Здесь вам нужно внести: название хоста, название базы данных, имя пользователя, пароль пользователя, поддерживать ли постоянное соединение (булев тип, по умолчанию — FALSE, т.е. не поддерживать). Для локального сервера здесь обычно требуется только поменять имя пользователя на «root» и изменить название базы данных, если вы ее назвали не «kohana», а как-то иначе. Для нелокального сервера эти настройки вам должен предоставить хостер.
Далее идут дополнительные настройки базы данных. Вы можете установить префикс (если ваши таблицы будут использовать его), кодировку(не советую менять), а также включить или выключить кеширование запросов и профилирование (вывод статистики по затратам времени и памяти в табличной форме, где показано минимальное, максимальное и среднее значение).
Вот и все настройки. Теперь можно создавать Модель и работать с базой данных, чем мы и займемся в следующем уроке.

<< Назад | Вперед >> | Обсудить на форуме

Альфонсы на сайтах знакомств смотрите здесь. | Какие продукты убивают раковые клетки подробности здесь.

К записи оставлено 10 коммент.

Спасибо за урок.
Я делаю простенький сайт и планирую пользоваться SQLite.
Объясните пожалуйста как правильно сконфигурировать подключение.

Насколько мне известно, настройк аналогичны настройкам alternate, там где pdo, только в ‘dsn’ нужно указать путь к файлу sqlite и говорят, что кодировку надо выставить в NULL, т.к. там какие-то проблемы с UTF8 возникают. Попробуйте, если что отпишите здесь, крайне любопытно. Сам подумываю об использовнии SQLite когда-нибудь.

Добрый день ! У меня есть простенький вопрос по ORM, раздела такого не нашел, здесь спрашивать ?И будет ли ORM на этой сайте в ближайшее время ?

Уроков по орм пока нет. Они будут. Пока лучше спрашивать на форуме.

class Model_User extends ORM {
protected $_has_one = array(
‘passport’ => array(
‘model’ => ‘passport’,
‘foreign_key’ => ‘user_id’,
),
);
}
Для чего создавать пустую модель ‘model’ => ‘passport’ и вообще это прописовать, обьясните пожалуйста, интересно как это использовать и т.п.

Скажите, пожалуйста, если ли в кохане модуль для работы с pdo?

Главное чтоб он у вас был)а в кохане работа с ним есть…

А у меня такой вопрос. хочу переделать подключение к БД через патент Singleton, вот только думаю как это сделать. На php сделал а тут даж не знаю как сделать

Боитесь, что у вас может получится несколько соединений ? Каким образом ?

Подключение SQLITE

- config/database.php

return array
(

‘default’ => array(
‘type’ => ‘PDO’,
‘connection’ => array(
‘dsn’ => ‘sqlite:database/database.db’,
‘persistent’ => FALSE,
),
‘table_prefix’ => »,
‘charset’ => NULL,
‘caching’ => FALSE,
‘profiling’ => TRUE,
),
);
- Model

class Model_Blocks extends ORM {
protected $_table_name = «blocks»;
protected $_table_columns = array(
‘id’ => ‘INT(1) AUTO_INCREMENT PRIMARY KEY’,
‘text’ => ‘TEXT’,
);
protected $_primary_key = ‘id’;
protected $_db_group = «default»;

}



Оставить комментарий или два

Пожалуйста, зарегистрируйтесь для комментирования.