批改状态:合格
老师批语:laravel这么流行, 是有原因的
laravel通过数据库查询数据后,数据类型既包含数组又包含对象,前端渲染的时候非常麻烦,很容易会把对象当成数组类型去调用,如果可以统一成数组的类型调用,将会非常方便。
Array([menus] => Array([0] => stdClass Object([mid] => 3[pid] => 0[ishidden] => 0[ord] => 0[status] => 0[icon] =>[title] => 管理账号[controller] => admin[action] =>[child] => Array([0] => stdClass Object([mid] => 4[pid] => 3[ishidden] => 0[ord] => 0[status] => 0[icon] =>[title] => 账号列表[controller] => admin[action] => index)))))
直接修改larvel框架DB定义的类,在类里面增加一个方法实现。
在不影响系统原先的代码,自定义一个文件拓展DB类实现自己想要的目的。集合都是可宏扩展(macroable) 的,它允许你在执行时将其它方法添加到Collection类。例如,通过下面的代码在 Collection 类中添加一个toUpper方法:
use Illuminate\Support\Collection;use Illuminate\Support\Str;Collection::macro('toUpper', function () {return $this->map(function ($value) {return Str::upper($value);});});$collection = collect(['first', 'second']);$upper = $collection->toUpper();// ['FIRST', 'SECOND']
class Builder{use BuildsQueries, ForwardsCalls, Macroable {__call as macroCall;}/*** The database connection instance.** @var \Illuminate\Database\ConnectionInterface*/public $connection;...
artisan创建一个provider,指令php artisan make:provider DBServiceProvider;use引入需要扩展的命名空间下的类,根据格式要求定义自己的方法。
<?phpnamespace App\Providers;use Illuminate\Support\ServiceProvider;use Illuminate\Database\Query\Builder as QueryBuilder;class DBServiceProvider extends ServiceProvider{/*** Register services.** @return void*/public function register(){//}/*** Bootstrap services.** @return void*/public function boot(){QueryBuilder::macro('lists',function() {// echo 'www.aoebbs.cn';$data= $this->get()->all();$result=[];foreach($data as $val) {$result[]=(array)$val;}return $result;});}}
config目录下的app.php,添加App\Providers\DBServiceProvider::class,
$data['admins']=DB::table('admin')->lists();echo '<pre>';print_r($data['admins']);
Array([0] => Array([id] => 1[name] => lin123458[password] => 07894c5f5ae76e45c452f69ebfe3fd58[time] => 2020-06-07 10:45:24[ip] => 178.221.141.246[groupbox] => system,gamegl,gametj,adgl,adff,adtj,jpgl,djgl,users,sms,hdgl,bbs,business,card,pay,dbgl,admingl)[1] => Array([id] => 2[name] => admin[password] => 07894c5f5ae76e45c452f69ebfe3fd58[time] => 2020-06-07 10:45:24[ip] => 178.221.141.249[groupbox] => system,gamegl,gametj,adgl,adff,adtj,jpgl,djgl,users,sms,hdgl,bbs,business,card,pay,dbgl,admingl))
底层原理任然是利用了php里面的trait特性,实现一个特定的功能类,这个功能类作为一个拓展,继承原来框架的功能基础上实现自己的目的。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号