1masoud
5 سال پیش توسط 1masoud مطرح شد
7 پاسخ

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

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


می خوام بدونم listenچطوری کار میکنه با ذکر مثال

ثبت پرسش جدید
علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 5 سال پیش مطرح شد
0

توی متد 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
تخصص : php,laravel
@masoudproton 5 سال پیش مطرح شد
علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 5 سال پیش مطرح شد
0

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


mahdi khanzadi
تخصص : backend developer at Snapp mar...
@khanzadimahdi 5 سال پیش آپدیت شد
0

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


1masoud
تخصص : php,laravel
@masoudproton 5 سال پیش مطرح شد
0

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


mahdi khanzadi
تخصص : backend developer at Snapp mar...
@khanzadimahdi 5 سال پیش مطرح شد
0

به عنوان مثال میتونید یه جدول به نام .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
تخصص : php,laravel
@masoudproton 5 سال پیش مطرح شد
0

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


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

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