All streams
Search
Write a publication
Pull to refresh
3
0
Send message

Beaver mysql logger или как найти ошибку в MySql приложении

Reading time1 min
Views5.9K
Здравствуй Хабр!

Периодически возникает необходимость отследить запросы, которые отправляет Ваше приложение к базе данных. К примеру:
— Вам нужно отладить/доработать чужой код;
— Запросы генерируются с помощью сторонней библиотеки (к примеру ActiveRecord), не понятно, какие именно и сколько их;
— Нужно оптимизировать приложение: посмотреть какие запросы и сколько их, посмотреть explain этих запросов.

В этих ситуациях на помощь приходит Beaver mysql logger.
Читать дальше →

Ускоряем разработку на PHP с помощью перегрузки

Reading time2 min
Views3.8K

Проблема


Часто приходится писать так (примеры кода на Yii, но подход можно применить к любому коду):
$model = new User();
$model->name = 'Вася';
if (!$model->save())
    throw new RuntimeException('Can not save!');

Или так:
$model = User::model()->find();
if (!$model)
    throw new CHttpException(404, 'User not found!');

Кеширование:
$dependency = new \caching\TagDependency('Post');
$posts = Post::model()->cache(1000, $dependency)->findAll();

Транзакции:
$trx = $this->getDbConnection()->beginTransaction();
try {
    if (!$user->makePayment())
        throw new \RuntimeException('Can not complete!');

    $trx->commit();
} catch (\Exception $e) {
    $trx->rollback();

    throw $e;
}


Слишком много кода!

Решение


Вышеприведенные куски кода можно сократить до:
Возбуждаем исключение в случае неудачного результата:
$model->saveException();
User::model()->findException();
Post::model()->findAllCached();


Оборачиваем метод в транзакцию:
$user->makePaymentTrx();


Также возможны комбинации:
User::model()->findTrxCached()


Читать дальше →

Information

Rating
Does not participate
Registered
Activity