调试页面隐藏环境变量,可以通过设置 config/app.php 配置文件中的 debug_blacklist 选项来完成这个操作。
'debug_blacklist' => [
'_ENV' => [
'APP_KEY',
'DB_PASSWORD',
],
'_SERVER' => [
'APP_KEY',
'DB_PASSWORD',
],
'_POST' => [
'password',
],
],
访问配置值
可以轻松地在应用程序的任何位置使用全局 config 函数来访问配置值
$value = config('app.timezone');
config(['app.timezone' => 'America/Chicago']);
配置缓存
php artisan config:cache
维护模式
php artisan up
php artisan down
php artisan down --allow=127.0.0.1 --allow=192.168.0.0/16
数据库
use Illuminate\Support\Facades\DB;
$users = DB::connection('foo')->select(...);
$users = DB::connection('foo')->insert(...);
$users = DB::connection('foo')->update(...);
$users = DB::connection('foo')->delete(...);
DB::statement(...);
DB::transaction(function(){},5);
DB::beginTransation();
DB::rollBack();
DB::commit();
任务调度
* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1
$schedule->call(function () {
DB::table('recent_users')->delete();
})->daily();
$schedule->call(function () {
//
})->weekly()->mondays()->at('13:00');
自定义了一个类,为了方便在其他别处使用,便可以使用服务提供者和门面。
namespace App\Helper;
class MyFoo{
public function add($a, $b)
{
return $a+$b;
}
}
namespace App\Providers;
use App\Helper\MyFoo; //要服务的Containeruse Illuminate\Support\ServiceProvider;
use App;
class MyFooServiceProvider extends ServiceProvider{
public function boot(){}
//注册到容器中
public function register()
{
//可以这么绑定,这需要use App;
App::bind("myfoo",function(){
return new MyFoo();
});
//也可以这么绑定
$this->app->bind("myfoo", function(){
return new MyFoo();
});
}
}
namespace App\Facades;
use Illuminate\Support\Facades\Facade;
class MyFooFacade extends Facade{
protected static function getFacadeAccessor()
{
//这里返回的是ServiceProvider中注册时,定义的字符串
return 'myfoo';
}
}
config/app.php中,在aliases中加入
'MyFoo' => App\Facades\MyFooFacade::class,
use App\Facades\MyFooFacade;
public function two($id=null){
//从系统容器中获取实例化对象
$myfoo = App::make("myfoo");
echo $myfoo->add(1,2);
//使用门面
echo MyFooFacade::add(4,5);
//别名
echo MyFoo::add(4,5);
}
1. $request->session()->put('key','value');//设置session
$request->session()->get('key');//获取session的值
2. Session::put('key','value');
Session::get('key');
//删除session中的指定值
Session::forget('key');
//清空所有session
Session::flush();
3. session()->get('key');
session()->put('key','value');
请注意,我们并没有告诉 Eloquent,Flight 模型该使用哪一个数据表。除非数据表明确地指定了其它名称,否则将使用类的复数形式「蛇形命名」来作为表名。因此,在这种情况下,Eloquent 会假定 Flight 模型存储的是 flights 数据表中的记录。你可以通过在模型上定义 table 属性,来指定自定义数据表:
Eloquent 也会假定每个数据表都有一个名为 id 的主键字段。你可以定义一个受保护的 $primaryKey 属性来覆盖这个约定。
另外,Eloquent 假定主键是一个递增的整数值,这意味着在默认情况下主键会自动转换为 int。 如果使用的是非递增或者非数字的主键,则必须在模型上设置 public $incrementing = false。如果主键不是一个整数,则应该在模型上设置 protected $keyType = ‘string’。
默认情况下,Eloquent 会默认数据表中存在 created_at 和 updated_at 这两个字段。如果你不需要这两个字段,则需要在模型内将 $timestamps 属性设置为 false:
Gates 提供了一个简单的、基于闭包的方式来授权认证。策略则和控制器类似,在特定的模型或者资源中通过分组来实现授权认证的逻辑。
Gates 大部分应用在模型和资源无关的地方,比如查看管理员的面板。与之相反,策略应该用在特定的模型或者资源中。
这两种形式的区别在于,授权逻辑是写在闭包里,还是 PHP 类方法里。闭包或方法最终都返回一个布尔值,true 表示有权限,false 表示没权限
优化后的执行计划使用了索引查找,将大幅提升该查询语句的性能,降低了锁定资源的时间,同时也减少了锁定资源的范围,这样就降低了锁资源循环等待事件发生的概率,对于预防死锁的发生会有一定的作用。
死锁是无法完全避免的,但如果应用程序适当处理死锁,对涉及的任何用户及系统其余部分的影响可降至最低(适当处理是指发生错误1205时,应用程序重新提交批处理,第二次尝试大多能成功。一个进程被杀死,它的事务被取消,它的锁被释放,死锁中涉及到的另一个进程就可以完成它的工作并释放锁,所以就不具备产生另一个死锁的条件了。)
mongodb 聚合
$cityId = 1;//城市ID
$count = UserModel::query()->raw(function ($collection) use ($cityId) {
$aggregate = [];
$aggregate[]['$match'] = [
'city_id' => intval($city_id),//过滤城市
'sex' => ['$in' => [1,2]],//过滤性别
];
$aggregate[]['$group'] = [
'_id' => '$sex',//更具性别进行分组
'avg_age' => [
'$avg' => '$age',//查询年龄平均值
]
];
//这里还可以继续添加各种条件
return $collection->aggregate($aggregate)->toArray();
});