راکت
1masoud
1masoud
توسط 1masoud مطرح شد
7 پاسخ

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

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


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

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

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


mahdi khanzadi
mahdi khanzadi
تخصص :Software engineer
@khanzadimahdi6 سال پیشمطرح شد
0

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


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

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


mahdi khanzadi
mahdi khanzadi
تخصص :Software engineer
@khanzadimahdi6 سال پیشمطرح شد
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
1masoud
تخصص :php,laravel
@masoudproton6 سال پیشمطرح شد
0

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


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

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