public function scopeBases(Query $query)
{
$id = $query->getPk();
$tableFields = $query->getTableFields();
//默认排序
if (in_array('sort', $tableFields)) {
$query->order('sort asc')->order("{$id} desc");
} else {
$query->order("{$id} desc");
}
//默认不包含软删除数据
if (in_array('is_deleted', $tableFields)) {
$query->where('is_deleted', 0);
}
}当我用查全局查询范围的时候发现更新这些操作也会触发,不是应该是有查询的时候才触发才对吗,然后我想通过数据库查询事件来实现,然后发现返回只能是返回自己return 的结果,那我怎么能通过查询事件调用query回调得到自己想要的结果,只要定义了查询事件不return,就是返回空,那查询事件的意义有什么,还是我使用的方式不对?Db::event('before_select', function($query){
$id = $query->getPk();
$tableFields = $query->getTableFields();
//默认排序
if (in_array('sort', $tableFields)) {
$query->order('sort asc')->order("{$id} desc");
} else {
$query->order("{$id} desc");
}
//默认不包含软删除数据
if (in_array('is_deleted', $tableFields)) {
$query->where('is_deleted', 0);
}
});class Index extends BaseController
{
public function initialize()
{
Db::event('before_find', function($q){
echo '执行查询';
});
}
public function index()
{
halt(Db::name('user')->find(3));
/*使用数据库查询事件返回结果,只是一个echo就改变了原数据
array(
0=>null
);
*/
/*不使用查询事件正常返回结果
array:15 [▼
"id" => 3
"headimg" => "1"
"nickname" => "<p>134355</p>"
"phone" => null
"openid" => "<p>sdff</p>"
"unionid" => null
"country" => null
"province" => null
"city" => null
"area" => null
"address" => null
"pay_pwd" => null
"money" => "0.00"
"create_at" => "2020-03-29 11:35:02"
"update_time" => null
]
*/
}
} 最佳答案