php的db类库Eloquent单独使用系列(3) - sql日志

[size=x-large]我的Eloquent单独使用系列文章[/size]
[url=http://xieye.iteye.com/blog/2382907]php的db类库Eloquent单独使用系列(1)[/url]
[url=http://xieye.iteye.com/blog/2383390]php的db类库Eloquent单独使用系列(2) - 分页[/url]
[url=http://xieye.iteye.com/blog/2387809]php的db类库Eloquent单独使用系列(3) - sql日志[/url]
[url=http://xieye.iteye.com/blog/2387983]php的db类库Eloquent单独使用系列(4)- 事件监听[/url]
[url=http://xieye.iteye.com/blog/2383466]php的db类库Eloquent单独使用系列(5)- 模型转数组[/url]
[url=http://xieye.iteye.com/blog/2388023]php的db类库Eloquent单独使用系列(6)- 一对一关联[/url]
[url=http://xieye.iteye.com/blog/2388029]php的db类库Eloquent单独使用系列(7)- 一对多关联[/url]
[url=http://xieye.iteye.com/blog/2388150]php的db类库Eloquent单独使用系列(8)- 多对多关联[/url]
[url=http://xieye.iteye.com/blog/2388162]php的db类库Eloquent单独使用系列(9)- 多对多关联 - 表关联自身[/url]
[url=http://xieye.iteye.com/blog/2388280]php的db类库Eloquent单独使用系列(10)- 多对多关联 - 远程一对多[/url]
[url=http://xieye.iteye.com/blog/2388521]php的db类库Eloquent单独使用系列(11)- 多对多关联 - 添加模型属性[/url]
[url=http://xieye.iteye.com/blog/2389182]php的db类库Eloquent单独使用系列(12)- 结果集模型转数组 - 2[/url]


安装同前,就不说了。
本文的目的是单独使用eloquent,脱离laravel环境使用,要求能打印sql日志。不想用laravel,但又想用eloquent。

下面的代码假定使用了一个表test2。

主要是3个文件,名字都可以自己改。路径也可以自己改,只要改namespace即可。
1)User是模型文件,里面啥都没有。
2)程序主文件。Ill.php
3)监听事件文件。SqlListener

模型文件User.php

<?php
namespace app\model;
class User extends \Illuminate\Database\Eloquent\Model
{
protected $table = 'test2';
public $timestamps = false;
}


监听文件 SqlListener.php

<?php
namespace app\model;
class SqlListener implements \Illuminate\Contracts\Events\Dispatcher
{
/**
* Dispatch an event and call the listeners.
*
* 注意:就改这个函数。也可以记录到文件日志里。
*
* @param string|object $event
* @param mixed $payload
* @param bool $halt
* @return array|null
*/
public function dispatch($event, $payload = [], $halt = false)
{
if ($event instanceof \Illuminate\Database\Events\QueryExecuted) {
$sql=$event->sql;
if ($event->bindings) {
foreach($event->bindings as $v) {
$sql = preg_replace('/\\?/', "'". addslashes( $v)."'", $sql,1);
}
}
echo $sql."<br>";
}
}

public function listen($events, $listener){}
public function hasListeners($eventName){}
public function subscribe($subscriber){}
public function until($event, $payload = []){}
public function push($event, $payload = []){}
public function flush($event){}
public function forget($event){}
public function forgetPushed(){}
}


程序主文件,能够记录执行的sql代码,调试时真的很有实用价值!

<?php
namespace app\control;
use \Illuminate\Database\Capsule\Manager as Capsule;
use app\model\User;
class Ill
{
public function logdemo()
{
$capsule = new Capsule;
$capsule->addConnection([
'driver' => 'mysql',
'host' => '127.0.0.1',
'database' => 'test1',
'username' => 'root',
'password' => 'root',
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
]);
$capsule->setAsGlobal();
$capsule->bootEloquent();
//设置sql日志监听
$capsule->setEventDispatcher(new \app\model\SqlListener() );
//下面是两种不同类型的sql操作,第一种是db门面,第2种使用了orm。
$users = $capsule::select('SELECT * FROM test2 limit 1');
$user = User::find(1);
}
}


下面是浏览器显示效果。

SELECT * FROM test2 limit 1
select * from `test2` where `test2`.`id` = '1' limit 1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值