Laravellaravel | 系统学习笔记五缓存优化 数据库查询缓存优化 数据库字段 show COLUMNS from 'user' //查询数据表的字段 生成数据表的缓存文件 php think optimize:schema //生成的目录在runtime/schema 路由 php think optimize:route //生成的目录在runtime/route.php 权限管理 权限粒度作者王明昌发布时间2018-12-25复制缓存优化 数据库查询缓存优化 数据库字段 show COLUMNS from 'user' //查询数据表的字段 生成数据表的缓存文件 php think optimize:schema //生成的目录在runtime/schema 路由 php think optimize:route //生成的目录在runtime/route.php 权限管理 权限粒度 用户-角色-权限 model.php namespace App; use Illuminate\Database\Eloquent\Model as EloquentModel; class Model extends EloquentModel { protected $guarded = []; } model中修改表头 protected $table = 'user'; 模型关联 adminuser 用户有哪些角色(多对多) public function roles(){ return $this->belongsToMany(\App\AdminRole::class,'admin_role_user','user_id','role_id')->withPivot(['user_id','role_id']); //关系表中的字段withPivot } 判断是否有某个角色 public function isInRole($roles){ //交集对比intersect //!! 返回bool类型 return !!$role->intersect($this->roles)->count(); } 给用户分配角色 public function assignRole($role){ //根据belongsToMany关联关系,直接确定当前的user_id return $this->roles()->save($role); } 取消用户分配的角色 public function deleteRole($role){ //detach 删除关系 return $this->roles()->detach($role); } 判断用户是否有权限(判断与权限的对象是否有交集) public function hasPermission($permission){ return $this->isInRoles($permission->roles); } AdminRole 获取当前角色的所有权限(多对多) public function permissions(){ return $this->belongsToMany(\App\AdminPermission::class.'admin_permission_role','role_id','permission_id')->withPrvot(['permission_id','role_id']); } 赋予角色权限 public function grantPermission($permission){ return $this->permissions()->save($permission) } 赋取消角色权限 public function grantPermission($permission){ return $this->permissions()->detach($permission) } 判断角色是否有权限 public function hasPermission($permission){ return $this->permissions->contains($permission); } adminPermission 权限 权限属于哪个角色 public function roles(){ return $this->belongsToMany(\App\AdminRole::class,'admin_permission_role','permission_id','role_id')->withPivot(['permission_id','role_id']); } compact() //创建一个包含变量名和它们的值的数组 view gate()实现权限管理 注册 //位置\app\providers\AuthServiceProvider.php public function boot() { $this->registerPolicies(); //拿出所有 $permissions = \App\AdminPermission::with('roles')->get(); foreach ($permissions as $permission) { Gate::define($permission->name, function($user) use($permission) { return $user->hasPermission($permission); }); } } 使用 路由方法: Routte::group(['middleware'=>'can:system'],function(){ ... }) 模板方法: @can('system') @endcan 控制器方法 $this->authorize('update',$post); Resource 资源路由 Route::resource('photo','\App\Admin\Controllers\PhotoController'); get /photos index photos/index get /photos/create create photos/create post /photos store photos/store get /photos/{photo} show photos/show get /photos/{photo}/edit edit photos/edit put/patch /photos/{photo} update photos/update delete /photos/{photo} destory photos/destory 只使用部分路由 Route::resource('photo','\App\Admin\Controllers\PhotoController',['only'=>['index','create','store']]); 系统通知notice laravel 的队列 驱动 修改驱动为database //config/queue.php 'default' => env('QUEUE_DRIVER', 'database'), 创建database对应的表(jobs) php artisan queue:table 执行 php artisan migrate 定义任务 创建任务 php artisan make:job SendMessage \app\Jobs\SendMessage.php public function __construct(\App\Notice $notice) { $this->notice = $notice; } public function handle() { // 通知每个用户 $users = \App\User::all(); foreach ($users as $user) { $user->addNotice($this->notice); } } NoticeController.php namespace App\Admin\Controllers; use App\Topic; use Illuminate\Http\Request; class NoticeController extends Controller { public function index() { $notices = \App\Notice::all(); return view('admin/notice/index', compact('notices')); } public function create() { return view('admin/notice/create'); } public function store(Request $request) { $this->validate($request, [ 'title' => 'required|min:3', 'content' => 'required|min:3' ]); $notice = \App\Notice::create(request(['title', 'content'])); dispatch(new \App\Jobs\SendMessage($notice)); return redirect('/admin/notices'); } public function show() { } public function edit() { // } public function update(Request $request, Topic $topic) { // } public function destroy() { } } 启动队列 php artisan queue:work //短期使用 nohup php artisan queue:work >> /dev/null & //长期使用 预加载 with load demo 1. $post = Post::with("user")->paginate(6); 2. $post = Post::paginate(6); $post->load('user'); {{$post->user->id}} 不加入预加载,在页面中会执行一次sql
2019-01-10laravel多条件排序$goods = Goods::orderBy('created_at','desc')->orderBy('id','desc')->paginate(6);
2018-03-11laravel开发博客遇到的问题(一)1.引入css,js,img等最好使用asset 使用此方式,获取的是带域名的绝对路径 2.测试数据库是否连接正常数据库 use DB; $pdo = DB::connection()->getPdo
2019-01-12laravel 使用生成二维码扩展composer require simplesoftwareio/simple-qrcode 1.5.1 // 在config/app.php 注册服务提供者: SimpleSoftwareIO\Q
2019-02-09laravel新建应用报错:The Process class relies on proc_open, which is not#laravel new blog Crafting application... [Symfony\Component\Process\Exception\RuntimeException] The
2020-01-01laravel 使用 Editor.md关于图片上传csrf的处理 大家都知道laravel默认提交表单时是启用csrf验证的 那么关于Editor.md关于图片上传csrf的处理有两个 1. 关闭csrf验证  加入csrf验证 上传方法:  视图: 加入t
2019-01-12laravel migration 中integer方法无法指定长度查看源代码后发现integer方法的第二个参数并不是指定长度,而是是否设置auto increment, 所以integer方法无法指定子段长度,默认为11。