راکت

سوال در مورد دیباگ eloquent

7 پاسخ

@ali.bayat
این کد منه
‍‍```
\DB::listen(function($sql) {
var_dump($sql);
});


می خوام بدونم listenچطوری کار میکنه با ذکر مثال
ثبت پرسش جدید

پاسخ‌ها

7
علی بیات
علی بیات
@ali.bayat

تخصص: توسعه دهنده ارشد وب

توی متد boot یک Service provider قرار میگیره به شکل زیر:

class AppServiceProvider extends ServiceProvider
{
    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        //
    }

    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        DB::listen(function ($query) {
            // $query->sql
            // $query->bindings
            // $query->time
        });
    }
}
1masoud
1masoud
@masoudproton

تخصص: php,laravel

شاید پاسخ شما همین‌جا باشد

علی بیات
علی بیات
@ali.bayat

تخصص: توسعه دهنده ارشد وب

هر اطلاعاتی بین فریم‌ورک و دیتابیس ردوبدل میشه رو نظارت میکنه

mahdi khanzadi
mahdi khanzadi
@khanzadimahdi

تخصص: Software engineer

از اسمش معولمه! به تمام کوئری هایی که لاراول اجرا میکنه گوش میده و به ازای هر کدوم از این کوئری ها اون تابعی که بهش دادین اجرا میشه. داخل تابع میتونید یه سری دستورات رو بنویسید که به ازای هر کوئری که ران میشه اون تابع هم اجرا بشه.
داخل تابع به مشخصات کوئری اجرا شده هم دسترسی دارید میتونید لاگ کوئری های اجرا شده رو ذخیره کنید یا هرکاری که لازمه انجام بدید باهاش.

1masoud
1masoud
@masoudproton

تخصص: php,laravel

@khanzadimahdi
میشه با مثال بگید

mahdi khanzadi
mahdi khanzadi
@khanzadimahdi

تخصص: Software engineer

به عنوان مثال میتونید یه جدول به نام .logs درست کنید و سه تا فیلد sql , bindings و time از نوع متنی داخلش تعریف کنید و لاگ تمام کوئری هایی که اجرا میشه رو درون دیتابیس نگهداری کنید.

یه مدل با نام Log ایجاد کنید و table اون رو برابر با logs قرار بدید و fillableهایی که داره رو هم طبق فیلد های جدولی که ساختیم تنظیم کنید. بعدش به صورت زیر عمل کنید:

public function boot()
{
    DB::listen(
        function ($query) {

            if (strpos($query->sql, 'logs') !== false ) {
                // we don't want it
                return;
            }

            Log::create([
                'sql' => $query->sql,
                'bindings' => implode(', ', $query->bindings),
                'time' => $query->time
            ]);

        }
    );
}
1masoud
1masoud
@masoudproton

تخصص: php,laravel

@ali.bayat
دیباگ کردنeloquentدر لاراول بدون پکیج

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام