Новичок: Как правильно настроить соединение БД на Zend Framework? - PullRequest
0 голосов
/ 06 декабря 2010

Я довольно новичок в ООП и Зенде.Пока что я пытаюсь установить соединение с БД.У меня есть это в моем файле application.ini:

resources.db.adapter = "PDO_MYSQL"
resources.db.params.host = "localhost"
resources.db.params.username = "root"
resources.db.params.password = ""
resources.db.params.dbname = "dbtest"
resources.db.isDefaultTableAdapter = true

Возможно, я могу получить доступ к адаптеру БД везде с помощью:

$db = Zend_Db_Table::getDefaultAdapter();

Проблема в том, что большинство руководств предполагают, что вы автоматически знаете, где разместитьэто, но я, честно говоря, понятия не имею.Что я делаю до сих пор, так это в моей модели Index.php у меня есть метод:

public function getPosts()
{
 $db = Zend_Db_Table::getDefaultAdapter();
 $sql = "SELECT * FROM posts";
 $result = $db->fetchAll($sql);
 return $result;
}

С этим одним запросом все будет в порядке, но если я захочу создать больше методов, содержащих другие мои запросыкаждый раз мне придется вызывать $ db = Zend_Db_Table :: getDefaultAdapter (), так что я уверен, что я не делаю это эффективным способом.Я уже пытался поместить его в различные методы __construct () и init (), но это не сработало.Куда бы я добавил код, не вызывая его каждый раз?Благодаря.

1 Ответ

3 голосов
/ 06 декабря 2010

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

ХотяИспользуя этот метод, вы сможете вызывать содержимое таблицы через

$postsTable = new Model_Db_Tables_Posts() // Assuming you put your class post in the folders models/db/tables/
$posts = $postsTable->fetchAll();

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

$singlePost = $postsTable->find(1); // Assuming the id of the post you want is 1

И затем для создания новых записей.Вы могли бы пойти с

$data = array('title' => 'Some title', 'content' => 'Some Content') // where the key is the table field and the value is the value you want to insert
$newId = $postsTable->insert($data);

И для обновления

$data = array('title' => 'Some title', 'content' => 'Some Content')
$db = $postsTable->getAdapter();
$where = $db->quoteInto('id = ?', $id); // quoteInto is used to escape unwanted chars in your query, not really usefull for integers, but still a good habit to have
$postsTable->update($data, $where);

Надеюсь, это вам немного поможет, вы можете найти больше информации в официальном документе ZF на http://framework.zend.com/manual/fr/zend.db.table.html иhttp://framework.zend.com/manual/fr/zend.db.table.row.html

...