@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
});
}
}@ali.bayat
کارش چیه
شاید پاسخ شما همینجا باشد
از اسمش معولمه! به تمام کوئری هایی که لاراول اجرا میکنه گوش میده و به ازای هر کدوم از این کوئری ها اون تابعی که بهش دادین اجرا میشه. داخل تابع میتونید یه سری دستورات رو بنویسید که به ازای هر کوئری که ران میشه اون تابع هم اجرا بشه.
داخل تابع به مشخصات کوئری اجرا شده هم دسترسی دارید میتونید لاگ کوئری های اجرا شده رو ذخیره کنید یا هرکاری که لازمه انجام بدید باهاش.
@khanzadimahdi
میشه با مثال بگید
به عنوان مثال میتونید یه جدول به نام .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
]);
}
);
}@ali.bayat
دیباگ کردنeloquentدر لاراول بدون پکیج