@ali.bayat
این کد منه
```
\DB::listen(function($sql) {
var_dump($sql);
});
می خوام بدونم listenچطوری کار میکنه با ذکر مثال
توی متد 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
});
}
}
از اسمش معولمه! به تمام کوئری هایی که لاراول اجرا میکنه گوش میده و به ازای هر کدوم از این کوئری ها اون تابعی که بهش دادین اجرا میشه. داخل تابع میتونید یه سری دستورات رو بنویسید که به ازای هر کوئری که ران میشه اون تابع هم اجرا بشه.
داخل تابع به مشخصات کوئری اجرا شده هم دسترسی دارید میتونید لاگ کوئری های اجرا شده رو ذخیره کنید یا هرکاری که لازمه انجام بدید باهاش.
به عنوان مثال میتونید یه جدول به نام .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
]);
}
);
}
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟