6 changed files with 219 additions and 54 deletions
			
			
		| @ -0,0 +1,75 @@ | ||||
| <?php | ||||
| 
 | ||||
| namespace yii\debug\models\search; | ||||
| 
 | ||||
| use yii\data\ArrayDataProvider; | ||||
| use yii\debug\components\search\Filter; | ||||
| 
 | ||||
| /** | ||||
|  * Db represents the model behind the search form about current request database queries. | ||||
|  */ | ||||
| class Db extends Base | ||||
| { | ||||
| 
 | ||||
| 	/** | ||||
| 	 * @var string type attribute input search value | ||||
| 	 */ | ||||
| 	public $type; | ||||
| 
 | ||||
| 	/** | ||||
| 	 * @var integer query attribute input search value | ||||
| 	 */ | ||||
| 	public $query; | ||||
| 
 | ||||
| 	public function rules() | ||||
| 	{ | ||||
| 		return [ | ||||
| 			[['type', 'query'], 'safe'], | ||||
| 		]; | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * @inheritdoc | ||||
| 	 */ | ||||
| 	public function attributeLabels() | ||||
| 	{ | ||||
| 		return [ | ||||
| 			'type' => 'Type', | ||||
| 			'query' => 'Query', | ||||
| 		]; | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Returns data provider with filled models. Filter applied if needed. | ||||
| 	 * @param array $params | ||||
| 	 * @param array $models | ||||
| 	 * @return \yii\data\ArrayDataProvider | ||||
| 	 */ | ||||
| 	public function search($params, $models) | ||||
| 	{ | ||||
| 		$dataProvider = new ArrayDataProvider([ | ||||
| 			'allModels' => $models, | ||||
| 			'pagination' => [ | ||||
| 				'pageSize' => 10, | ||||
| 			], | ||||
| 			'sort' => [ | ||||
| 				'attributes' => ['duration','type','query'], | ||||
| 				'defaultOrder' => [ | ||||
| 					'duration' => SORT_DESC, | ||||
| 				], | ||||
| 			], | ||||
| 		]); | ||||
| 
 | ||||
| 		if (!($this->load($params) && $this->validate())) { | ||||
| 			return $dataProvider; | ||||
| 		} | ||||
| 
 | ||||
| 		$filter = new Filter(); | ||||
| 		$this->addCondition($filter, 'type', true); | ||||
| 		$this->addCondition($filter, 'query', true); | ||||
| 		$dataProvider->allModels = $filter->filter($models); | ||||
| 
 | ||||
| 		return $dataProvider; | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
| @ -0,0 +1,53 @@ | ||||
| <?php | ||||
| use yii\helpers\Html; | ||||
| use yii\grid\GridView; | ||||
| ?> | ||||
| <h1>Database Queries</h1> | ||||
| 
 | ||||
| <?php | ||||
| 
 | ||||
| echo GridView::widget([ | ||||
| 	'dataProvider' => $dataProvider, | ||||
| 	'id' => 'db-panel-detailed-grid', | ||||
| 	'filterModel' => $searchModel, | ||||
| 	'filterUrl' => $panel->getUrl(), | ||||
| 	'columns' => [ | ||||
| 		['class' => 'yii\grid\SerialColumn'], | ||||
| 		[ | ||||
| 			'attribute' => 'duration', | ||||
| 			'value' => function ($data) | ||||
| 			{ | ||||
| 				return sprintf('%.1f ms',$data['duration']); | ||||
| 			}, | ||||
| 		], | ||||
| 		[ | ||||
| 			'attribute' => 'type', | ||||
| 			'value' => function ($data) | ||||
| 			{ | ||||
| 				return Html::encode(mb_strtoupper($data['type'],'utf8')); | ||||
| 			}, | ||||
| 		], | ||||
| 		[ | ||||
| 			'attribute' => 'query', | ||||
| 			'value' => function ($data) | ||||
| 			{ | ||||
| 				$query = Html::encode($data['query']); | ||||
| 
 | ||||
| 				if (!empty($data['trace'])) { | ||||
| 					$query .= Html::ul($data['trace'], [ | ||||
| 						'class' => 'trace', | ||||
| 						'item' => function ($trace) { | ||||
| 							return "<li>{$trace['file']}({$trace['line']})</li>"; | ||||
| 						}, | ||||
| 					]); | ||||
| 				} | ||||
| 				return $query; | ||||
| 			}, | ||||
| 			'format' => 'html', | ||||
| 			'options' => [ | ||||
| 				'width' => '70%', | ||||
| 			], | ||||
| 		] | ||||
| 	], | ||||
| ]); | ||||
| ?> | ||||
| @ -0,0 +1,7 @@ | ||||
| <?php if ($queryCount): ?> | ||||
| <div class="yii-debug-toolbar-block"> | ||||
| 	<a href="$url" title="Executed <?php echo $queryCount; ?> database queries which took <?php echo $queryTime; ?>.">
 | ||||
| 		DB <span class="label"><?php echo $queryCount; ?></span> <span class="label"><?php echo $queryTime; ?></span>
 | ||||
| 	</a> | ||||
| </div> | ||||
| <?php endif; ?> | ||||
					Loading…
					
					
				
		Reference in new issue