• laravel中的命名公约规范及relation N+1问题


      User: model  ;  users: 表名; user_id 键值    

    relation: public function tasks(){return $this->belongsToMany('Task','task_id');}

      Task: model名; tasks:表名; task_id  键值

    relation: public function ower(){return $this->belongsToMany('User','user_id');} //注意:默认情况下如果不指定键字段,则会使用owner_id作为键

     $user = User::first();

    $user->tasks()->attach(2); 将会对relation执行操作

    Task::where('title','LIKE',"%$searchdata%")->get()   全文搜索

    在laravel relation操作中,如果对有多条数据的行,执行relation关系表运算,则由于会多次查询数据库,将严重影响系统性能。比如,一个可行的方法是 eager oading.

    比如上述关系中,如果有10个user,分别要显示

    @foreach($tasks as $task)

    <li><strong>{{$task->owner->name}}</strong> 有以下任务{{$task->title}}</li>

    @endforeach

    可以将PHP代码稍微改进一次性获取数据集后传入blade模版,

    $tasks  = Task::with('owner')->get();  通过这一句话的修改,laravel访问数据库将减少为1次,而不是11次!!(N+1问题)

  • 相关阅读:
    redis 基础知识
    vue + django 项目部署
    django 的静态资源
    uwsgi 与 supervisor
    django基础之orm(models)初识
    django基础之模板Template
    django基础知识之视图views
    django基础知识之django介绍及url
    django基础之Web框架介绍
    mysql之pymysql模块相关
  • 原文地址:https://www.cnblogs.com/kidsitcn/p/4696830.html
Copyright © 2020-2023  润新知