为了账号安全,请及时绑定邮箱和手机立即绑定

laravel 框架的使用

标签:
PHP laravel

[TOC]

aravel配置文件

1️⃣ app --------------------------控制器模型,数据操作

2️⃣ bootstrap--------------------系统所使用的目录,表格,样式,启动的文件

3️⃣ config ------------------------包含邮件,session,view的配置文件

  • App.php---------------------项目的主要配置文件
  • Auth.php--------------------用于定义用户认证,登录的文件
  • Database.php-------------针对数据库的配置
  • factories
  • migrations-------------通过这个文件创建类,每一个数据表就是一个
  • seeds
  • Filesystems.php----------上传文件,文件存储需要使用到的配置文件

4️⃣ public ------------------------入口文件

5️⃣ resources--------------------存放视图文件,还有就是语言包的目录

  • Lang 目录:语言包目录(如果项目需要本地化则配置语言包)
  • Views 目录: 视图文件存储目录(视图文件也可以分目录管理)

7️⃣ routes-------------------------定义路由的目录,web.php是定义路由的目录

8️⃣ storage------------------------主要是存放缓存和日志文件,注意,在linux里,这个目录需要可写权限

  • app------------------用户上传的文件
  • framework---------框架运行时的缓存文件
  • logs------------------日志

9️⃣ vendor------------------------第三方的代码依赖

🔟 .env-----------------------------主要是设置一些系统相关的环境配置文件信息.

创建controller

  1. 创建

    php artisan make:Controller

    <?php
    
    
    namespace App\Http\Controllers;
    
    
    
    
    use Illuminate\Http\Request;// 命名空间的三元素: 常量,方法,类
    
    
    
    
    class ni extends Controller
    {
    //
    }
    
    class ni extends Controller
    {
    //
    }
    
    
  2. 路由的基本使用

    //跟路由
    Route::get("/",function(){
    
    
    });
    
    
    
    
    router-&gt;any("/home",function()
        {
            echo "这是/home";
        });
        router->match(['get',"post"],"/home",function (){
    echo "这是/home";
    });
    // 路由参数
    // 必选参数
    router-&gt;get("/home{id}",function(){
            echo id;
    });
    // 可选参数
    router-&gt;get("/home{id?}",function(){
            echo id;
    });
    
    
    
    
    // 路由别名
    router-&gt;get("/home{id?}",function(){
            echo id;
    }) -> name("route");
    // 查看路由
    php artisan route:list
    
    
    
    
    // 路由群组
    Route::group(['prefix'=>"admin"],function(){
    
    
    
     });
    
    
    
    
    
  3. 控制器路由

    Route::请求方法(路由表达式,‘控制器@方法’)

  4. 控制器分目录管理

    后台管理

    php artisan make:controller admin/controller

    前代管理

    php artisan make:controller home/controller

  5. 接受用户输入

    Facades:门面,们面是一个类的实例化与没有实例化中间的一个状态,其实是类的一个接口是实现.在这个状态下可以不实例化类但是可以调用类中的方法.说白了就是静态方法

    use Illuminate\Support\Facades\Input

    Input:get("id","10086");// 属性名 , 默认值
    Input:all():获取所有的用户输入 // 返回的是一个数组
    Input:get(''):获取单个用户的输入
    Input:only([]):获取指定几个用户的输入
    
    

    注:以上6.0以下版本使用

    Request 这个 facade 可以让我们得到绑定在容器里的当前这个请求

    // 获取所有输入的值
    $request->input("");
    // 没有获取到,使用默认值
    $request->input("","默认值");
    // 确定一个值是否出现
    $request->has("name");
    // 得到请求里的所有输入的值
    $request->all();
    // 如果输入里面包含数组类型的值,可以使用点的形式访问到这个数组里的值:
    $request->input('mysql.table.name');
    
    

    // 可以把值缓存到会话里,这样用户下一次发送请求的时候就可以获取到以前的值
    Request::flash();
    // 缓存部分的值
    Request::flashOnly(“username”,“password”);

    
    #bytemd-mermaid-1698395072644-0{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#bytemd-mermaid-1698395072644-0 .error-icon{fill:#552222;}#bytemd-mermaid-1698395072644-0 .error-text{fill:#552222;stroke:#552222;}#bytemd-mermaid-1698395072644-0 .edge-thickness-normal{stroke-width:2px;}#bytemd-mermaid-1698395072644-0 .edge-thickness-thick{stroke-width:3.5px;}#bytemd-mermaid-1698395072644-0 .edge-pattern-solid{stroke-dasharray:0;}#bytemd-mermaid-1698395072644-0 .edge-pattern-dashed{stroke-dasharray:3;}#bytemd-mermaid-1698395072644-0 .edge-pattern-dotted{stroke-dasharray:2;}#bytemd-mermaid-1698395072644-0 .marker{fill:#333333;stroke:#333333;}#bytemd-mermaid-1698395072644-0 .marker.cross{stroke:#333333;}#bytemd-mermaid-1698395072644-0 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#bytemd-mermaid-1698395072644-0 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#bytemd-mermaid-1698395072644-0 .cluster-label text{fill:#333;}#bytemd-mermaid-1698395072644-0 .cluster-label span{color:#333;}#bytemd-mermaid-1698395072644-0 .label text,#bytemd-mermaid-1698395072644-0 span{fill:#333;color:#333;}#bytemd-mermaid-1698395072644-0 .node rect,#bytemd-mermaid-1698395072644-0 .node circle,#bytemd-mermaid-1698395072644-0 .node ellipse,#bytemd-mermaid-1698395072644-0 .node polygon,#bytemd-mermaid-1698395072644-0 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#bytemd-mermaid-1698395072644-0 .node .label{text-align:center;}#bytemd-mermaid-1698395072644-0 .node.clickable{cursor:pointer;}#bytemd-mermaid-1698395072644-0 .arrowheadPath{fill:#333333;}#bytemd-mermaid-1698395072644-0 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#bytemd-mermaid-1698395072644-0 .flowchart-link{stroke:#333333;fill:none;}#bytemd-mermaid-1698395072644-0 .edgeLabel{background-color:#e8e8e8;text-align:center;}#bytemd-mermaid-1698395072644-0 .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#bytemd-mermaid-1698395072644-0 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#bytemd-mermaid-1698395072644-0 .cluster text{fill:#333;}#bytemd-mermaid-1698395072644-0 .cluster span{color:#333;}#bytemd-mermaid-1698395072644-0 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#bytemd-mermaid-1698395072644-0 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#bytemd-mermaid-1698395072644-0 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}
    
    Request
    
    获取请求
    
    input
    
    加入缓存
    
    flash
    
    
    

数据库的操作

对于数据的操作都是在模型中完成,但是如果不使用 Model ,我们也可以使用 DB类 来创建

数据表的创建与配置

  1. 建立数据库

    • sql 语句

    • 图形界面

    • 在config->database.php文件中配置

      如果是在php artisan serve方式启动的,修改了配置文件,则需要重新启动,才能读取修改后的配置文件,如果是wamp/lamp等环境则不需要重启;

  2. 数据库的增删改查

      public function add()
        {
            // 定义操作关联的表
            $db = DB::table("users");
            // 使用insert增加记录 连贯操作  链式操作
            $db->insert([
                [
                    'name'     => "付立翔",
                    'email'    => "2172792521@qq.com",
                    'password' => "123456",
                ]
            ]);
        }
        public function del()
        {
            // 定义操作关联的表
            $db = DB::table("users");
        }
        public function upd(Request $request)
        {
            // 定义操作关联的表
            $db = DB::table("users");
            $db->where("id", "=", "2")->update(["name" => "大师"]);
        }
        public function sel()
        {
            // 查询全部的数据
            $db = DB::table("users");
            // dd($db->get());
    
        // 查询id等于三的数据
         $data = $db -&gt;where(&#39;id&#39;,&#39;=&#39;,&#39;2&#39;) -&gt;get();
        dd($data);
    }
    
    
    
    
    // where()->where()->where() 这是并且关系
    // where()->orWhere()->orWhere() 这是或者关系
    
    
    
        // 按照指定的字段进行特定规则的排序
        $db-&gt;orderBy(&#39;age&#39;,&#39;desc&#39;)-&gt;get();
    
    
    
    
    // 执行任意的SQL语句
    
    
    
    
    执行任意的 insert , delete , update 语句
    DB::statement
    执行任意的 select 语句
    DB::select
    
    
    
    执行任意的 insert , delete , update 语句
    DB::statement
    执行任意的 select 语句
    DB::select
    
    

视图操作

// 返回视图
return view("index");
// 传递参数
1. return view("index",["ni"=>"ni","wo"="wo"]);
// 第一个是参数名,第二个是值
2. return view("index")->with("ni","ni")->with("wo","wo");
// compact 原生
3. $ni = "ni";
   $wo = "wo";
   return view('index',compact("ni","wo"));

// 判断试图文件是否存在
$router-&gt;get("wo", function () {
    if (View::exists("welcome")) {
        echo &#39;视图存在&#39;;
    } else {
        echo &#39;视图不存在&#39;;
    }
});




数据库模型

创建数据库表

// 创建数据库表的模型
// 必选
protected $table = "users";
// 可选,禁用时间戳
protected $timestamps = false;

  1. 模型插入

    $this->insert([]);
    
    
  2. 模型查询

    $this->where('id','=','1')->get();
    
    
  3. 模型修改

    $this->where('id','=','1')->update([]);
    
    
  4. 模型删除

    $this->where('id','=','1')->delete();
    
    

分页数据

@foreach ($nn as $list)
        <tr>
            <td>{{ $list->id }}</td>
            <td>{{ $list->name }}</td>
            <td>{{ $list->email }}</td>
            <td>{{ $list->password }}</td>
        </tr>
    @endforeach


</table>
{{ $nn->links() }}




// 在数据库中使用paginate方法
public function fenye(){
return $this->paginate(1);
}

// 在数据库中使用paginate方法
public function fenye(){
return $this->paginate(1);
}

数据迁移

回滚最后一次迁移,可以使用 rollback 命令:


php artisan migrate:rollback




php artisan migrate:rollback --step=5 //回滚迁移的个数




php artisan migrate:reset //回滚应用程序中的所有迁移




php artisan migrate:refresh // 命令不仅会回滚数据库的所有迁移还会接着运行 migrate 命令




php artisan migrate  //恢复

php artisan migrate  //恢复

注: 如果是第一次执行文件的话,则必须执行

php artisan migrate:install

给表添加注释

  1. 下载
composer require zedisdog/laravel-schema-extend

  1. 修改config->app.php->aliases

    'aliases' => [
        ...
        // 'Schema' => Illuminate\Support\Facades\Schema::class,
        'Schema'    => Jialeo\LaravelSchemaExtend\Schema::class,
    ],
    
    
    1. 使用

      默认创建的migration文件对应的“Schema”还是引用的laravel自带的,需要修改为该组件包的引用

    //use Illuminate\Support\Facades\Schema;
    use Jialeo\LaravelSchemaExtend\Schema;
    
    
1. php artisan make:migration CreateTestTable
// 刪除所有表和迁移
2. php artisan migrate:fresh


// 使用 Artisan 命令 migrate 来运行所有未完成的迁移:
php artisan migrate   可以接表名
// 执行数据回滚,就是删除的意思
php artisan migrate:rollback

// 使用 Artisan 命令 migrate 来运行所有未完成的迁移:
php artisan migrate   可以接表名
// 执行数据回滚,就是删除的意思
php artisan migrate:rollback

<?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; class CreatePaperTable extends Migration { /** * Run the migrations. * 创建数据表 * @return void */ public function up() { Schema::create('paper', function (Blueprint $table) { $table->id(); $table->timestamps(); }); } /** * Reverse the migrations. * 删除数据表 * @return void */ public function down() { Schema::dropIfExists('paper'); } } ``` ### 命令详解 ``` $table->id(); $table->bigIncrements('id') 的别名 $table->foreignId('user_id'); $table->unsignedBigInteger('user_id') 的别名 $table->bigIncrements('id'); 递增 ID(主键),相当于「UNSIGNED BIG INTEGER」 $table->bigInteger('votes'); 相当于 BIGINT $table->binary('data'); 相当于 BLOB $table->boolean('confirmed'); 相当于 BOOLEAN $table->char('name', 100); 相当于带有长度的 CHAR $table->date('created_at'); 相当于 DATE $table->dateTime('created_at', 0); 相当于 DATETIME ,可以指定位数 $table->dateTimeTz('created_at', 0); 相当于 DATETIME (带时区) ,可以指定位数 $table->decimal('amount', 8, 2); 相当于 DECIMAL,可以指定总位数和小数位数 $table->double('amount', 8, 2); 相当于 DOUBLE,可以指定总位数和小数位数 $table->enum('level', ['easy', 'hard']); 相当于 ENUM $table->float('amount', 8, 2); 相当于 FLOAT,可以指定总位数和小数位数 $table->geometry('positions'); 相当于 GEOMETRY $table->geometryCollection('positions'); 相当于 GEOMETRYCOLLECTION $table->increments('id'); 递增 ID(主键),相当于 UNSIGNED INTEGER $table->integer('votes'); 相当于 INTEGER $table->ipAddress('visitor'); 相当于 IP 地址 $table->json('options'); 相当于 JSON $table->jsonb('options'); 相当于 JSONB $table->lineString('positions'); 相当于 LINESTRING $table->longText('description'); 相当于 LONGTEXT $table->macAddress('device'); 相当于 MAC 地址 $table->mediumIncrements('id'); 递增 ID(主键),相当于 UNSIGNED MEDIUMINT $table->mediumInteger('votes'); 相当于 MEDIUMINT $table->mediumText('description'); 相当于 MEDIUMTEXT $table->morphs('taggable'); 相当于加入递增 UNSIGNED BIGINT 类型的 taggable_id 与字符串类型的 taggable_type $table->uuidMorphs('taggable'); 相当于添加一个 CHAR (36) 类型的 taggable_id 字段和 VARCHAR (255) UUID 类型的 taggable_type $table->multiLineString('positions'); 相当于 MULTILINESTRING $table->multiPoint('positions'); 相当于 MULTIPOINT $table->multiPolygon('positions'); 相当于 MULTIPOLYGON $table->nullableMorphs('taggable'); 添加一个可以为空版本的 morphs() 字段. $table->nullableUuidMorphs('taggable'); 添加一个可以为空版本的 uuidMorphs() 字段 $table->nullableTimestamps(0); timestamps() 方法的别名 $table->point('position'); 相当于 POINT $table->polygon('positions'); 相当于 POLYGON $table->rememberToken(); 添加一个允许空值的 VARCHAR (100) 类型的 remember_token 字段 $table->set('flavors', ['strawberry', 'vanilla']); 相当于 SET $table->smallIncrements('id'); 递增 ID(主键),相当于 UNSIGNED SMALLINT $table->smallInteger('votes'); 相当于 SMALLINT $table->softDeletes('deleted_at', 0); 相当于为软删除添加一个可空的 deleted_at 字段 $table->softDeletesTz('deleted_at', 0); 相当于为软删除添加一个可空的 带时区的 deleted_at 字段 $table->string('name', 100); 相当于指定长度的 VARCHAR $table->text('description'); 相当于 TEXT $table->time('sunrise', 0); 相当于指定位数的 TIME $table->timeTz('sunrise', 0); 相当于指定位数带时区的 TIME $table->timestamp('added_on', 0); 相当于指定位数的 TIMESTAMP $table->timestampTz('added_on', 0); 相当于指定位数带时区的 TIMESTAMP $table->timestamps(0); 相当于添加可空的 TIMESTAMP 类型的 created_at 和 updated_at $table->timestampsTz(0); 相当于添加指定时区的可空的 TIMESTAMP 类型的 created_at 和 updated_at $table->tinyIncrements('id'); 相当于自动递增 UNSIGNED TINYINT $table->tinyInteger('votes'); 相当于 TINYINT $table->unsignedBigInteger('votes'); 相当于 UNSIGNED BIGINT $table->unsignedDecimal('amount', 8, 2); 相当于 UNSIGNED DECIMAL ,可以指定总位数和小数位数 $table->unsignedInteger('votes'); 相当于 UNSIGNED INTEGER $table->unsignedMediumInteger('votes'); 相当于 UNSIGNED MEDIUMINT $table->unsignedSmallInteger('votes'); 相当于 UNSIGNED SMALLINT $table->unsignedTinyInteger('votes'); 相当于 UNSIGNED TINYINT $table->uuid('id'); 相当于 UUID $table->year('birth_year'); 相当于 YEAR ``` ### 数据类型结构 ``` /* 表引擎 */ $table->engine = 'InnoDB'; /* 类类型 */ // - 数字 $table->bigInteger('id'); $table->integer('id'); $table->mediumInteger('id'); $table->smallInteger('id'); $table->tinyInteger('id'); $table->decimal('balance', 15, 8); $table->float('balance'); $table->double('balance', 15, 8); $table->real('balance'); // - 时间 $table->date('created_at'); $table->dateTime('created_at'); $table->timeStamp('created_at'); $table->time('sunrise'); // - 字符串 $table->char('name', 4); // 等同于 VARCHAR $table->string('name'); // 等同于 VARCHAR(100) $table->string('name', 100); $table->text('description'); $table->mediumText('description'); $table->longText('description'); // 等同于 BLOB $table->binary('data'); $table->enum('choices', ['foo', 'bar']); $table->boolean('confirmed'); // - 这3个没见过 $table->json('options'); // 等同于数据库中的 JSON 类型 $table->jsonb('options'); // 等同于数据库中的 JSONB 类型 $table->uuid('id'); // 等同于数据库的UUID // 自增ID,类型为 bigint $table->bigIncrements('id'); // 自增ID,类型为 int $table->increments('id'); // 添加一个 INTEGER类型的 taggable_id 列和一个 STRING类型的 taggable_type列 $table->morphs('taggable'); // 和 timestamps() 一样,但允许 NULL 值 $table->nullableTimestamps('created_at'); // 添加一个 'remember_token' 列:VARCHAR(100) NULL $table->rememberToken(); // 添加 'created_at' 和 'updated_at' $table->timeStamps(); // 新增一个 'deleted_at' 列,用于 '软删除' $table->softDeletes(); /* 列修改器 */ ->first(); // 将列置于表第一个列(仅限于MYSQL) ->after('列名'); // 将列置于某一列后(仅限于MYSQL) ->nullable(); // 允许列为NULL ->defalut($value); // 指定列默认值 ->unsigned(); // 设置整型列为 UNSIGNED /* 修改列 需安装 doctrine/dbal,composer require doctrine/dbal */ // change() - 修改列 $table->string('name', 30)->nullable()->change(); // renameColumn() - 重命名列 $table->renameColumn('name', 'title'); /* 删除列 需安装 doctrine/dbal,composer require doctrine/dbal */ // 删除单个列 $table->dropColumn('name'); // 删除多个列 $table->dropColumn(['name', 'age']); /* 创建索引 * 每种索引,都有3种方式: * 一个string参数 * 一个array参数 - 组合索引 * 2个参数 - 允许自定义索引名 * 注意: * laravel自动分配的索引名: * 表名_列名_索引类型:users_mobile_unique // users表的mobile字段为unique索引 */ $table->primary('id'); // 主键索引 $table->primary(['first', 'last']); // 混合索引(这个不太清楚) $table->primary('first', 'first_primary_index']); // 自定义索引名 $table->unique('mobile'); // 唯一索引 $table->index('state'); // 普通索引 /* 删除索引 */ $table->dropPrimary('索引名') $table->dropUnique('索引名') $table->dropIndex('索引名') /* 外键约束 * 注意: * laravel自动分配的外键名: * 表名_列名_foreign:posts_user_id_foreign // posts表的user_id字段添加foreign */ // 添加外键,当前表的user_id,外键关联users表的id列 $table->foreign('user_id')->references('id')->on('users'); // 约束 'on delete' 和 'on update' 时,才关联外键 $table->foreign('user_id')->references('id')->on('users')->onDelete; // 删除外键 $table->dropForeign('posts_user_id_foreign'); *Blueprint类中的方法方法 <-> 数据库数据类型 * */ // 数字 increments();// int(10) unsigned primarykey auto_increment bigInteger();// bigint(20) unsignedBigInteger();// bigint(20) unsigned integer();// int(11) unsignedInteger();// int(10) unsigned mediumInteger();// mediumint(9) unsignedMediumInteger()// mediumint(8) unsigned smallInteger();// smallint(6) tinyInteger();// tinyint(4) boolean();// tinyint(1) decimal();// deciaml 长度和小数位长度 unsignedDecimal();// decimal(8, 2) unsigned double();// double float();// double(8, 2) binary();// blob boolean();// 相当于BOOLEAN 其实也就是tinyint(1) // 字符串 char();// char(255) uuid();// char(36) string();// varchar(255) remember_token();// varchar(100) ipAddress();// varchar(45) macAddress();// varchar(17) text();// text longText();// longtext mediumText();// mediumText enum();// enum() lineString();// linestring multiLineString();// multilnestring // 时间 year();// year(4) date();// date dateTime();// datetime time();// 不带时区的time timeTz();// 带时区的time timestamp();// timestamp // 特殊 point();// point multiPoint();// multipoint Polygon();// polygon multiPolygon();// multipolygon * */ // 数字 increments();// int(10) unsigned primarykey auto_increment bigInteger();// bigint(20) unsignedBigInteger();// bigint(20) unsigned integer();// int(11) unsignedInteger();// int(10) unsigned mediumInteger();// mediumint(9) unsignedMediumInteger()// mediumint(8) unsigned smallInteger();// smallint(6) tinyInteger();// tinyint(4) boolean();// tinyint(1) decimal();// deciaml 长度和小数位长度 unsignedDecimal();// decimal(8, 2) unsigned double();// double float();// double(8, 2) binary();// blob boolean();// 相当于BOOLEAN 其实也就是tinyint(1) // 字符串 char();// char(255) uuid();// char(36) string();// varchar(255) remember_token();// varchar(100) ipAddress();// varchar(45) macAddress();// varchar(17) text();// text longText();// longtext mediumText();// mediumText enum();// enum() lineString();// linestring multiLineString();// multilnestring // 时间 year();// year(4) date();// date dateTime();// datetime time();// 不带时区的time timeTz();// 带时区的time timestamp();// timestamp // 特殊 point();// point multiPoint();// multipoint Polygon();// polygon multiPolygon();// multipolygon ``` #### 创建填充器 1. 创建 ``` php artisan make:seeder `````` <?php namespace Database\Seeders; use Illuminate\Database\Seeder; use Illuminate\Support\Facades\DB; class n1Seeder extends Seeder { /** * Run the database seeds. * * @return */ public function run() { // 定义数组 data=[ 'parper_name'=>"五年高考,三年模拟", 'total_score'=>23, ]; // 写入数据 DB::table('paper')->insert(data); } } ``` // 使用工厂函数添加数据 /\*\* ``` * 运行数据库填充 @return void */ public function run() { DB::table('users')->insert([ 'name' => str_random(10), 'email' => str_random(10).'@gmail.com', 'password' => bcrypt('secret'), ]); } `````` 执行 ​``` php php artisan db:seed --class=文件名 ``` ### 表单 #### 1\. 表单提交 表单提交需要加@csrf 防止csrf攻击 或者在**middleware**中的VenifyCsrfToken.php中添加白名单 #### 2\. 表单验证 ``` $this->validata($request,[ "name" => 'required|min:2|max:30', // 不能为空 最小二,最大三十 'age' => 'required|interger' // 不能为空,整型 'eamil'=>'required|email' // 不能为空 并且是邮箱 confirmed // 验证两个字段是否相同 ``` 还有一个报错捕获,我没写 #### 3\. laravel的验证码 1. 🔍 搜索captcha 2. 使用命令行下载 _composer require mews/captcha_ 3. 使用命令进行配置 php artisan vendor:publish ### artisan命令 #### 设置自定义命令 ``` php artisan make:command HelloMessage --command=Hello:info ``` #### tinker命令行 交互式的数据库命令行 什么用都没有 ### 服务容器 ``` 1. 可以在任何地方使用,相当于解耦 interface Food { public function weight(); } class Apple implements Food { public function __construct(weight) { return this->weight = weight; } public function weight() { return this->weight(); } } // 绑定 app()->bind('weight', function () { return new Apple("100"); }); class Apple implements Food { public function __construct(weight) { return this->weight = weight; } public function weight() { return this->weight(); } } // 绑定 app()->bind('weight', function () { return new Apple("100"); }); ``` ### facade ### Contracts ### ajax请求的响应 1. 返回json ``` // 两种方法可以转换json return json_encode($data); return response()->json($data); ``` 注:php是不能直接发回boolean类型的数据的 2. 跳转响应(重定向) ``` return redirect(路由); ``` ### 回话控制 1. 存 ``` Session::put("name","value"); ``` 2. 拿 ``` Session::get("name"); Session::all(); ``` 3. 删 ``` Session::forget("name"); Session::flush(); ``` 4. 判断 ``` Session::has("name"); ``` ### 缓存控制 #### 配置 Laravel 为不同的缓存系统提供了统一的 API。缓存配置位于 `config/cache.php`。在该文件中你可以指定在应用中默认使用哪个缓存驱动。Laravel 开箱支持主流的缓存后端如 [Memcached](https://memcached.org/) 和 [Redis](http://redis.io/) 等。 缓存配置文件还包含其他文档化的选项,确保仔细阅读这些选项。默认情况下,Laravel 被配置成使用文件缓存(`file` 驱动),这会将序列化数据和缓存对象存储到文件系统。对于大型应用,建议使用内存缓存如 Memcached 或 APC,你甚至可以为同一驱动配置多个缓存配置。 1. 设置缓存 存在,覆盖 ``` Cache::put("key","value",$minutes); ``` 存在,不覆盖 ``` Cache::add("key","value",$minutes); ``` 2. 删除缓存 ``` Cache::forever("key","value"); ``` 3. 获取缓存 ``` Cache::get("name"); ``` ### 联表查询 跟数据库一样 ### 关联模型 1. 1对1 ``` // 第一个表 <?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class article extends Model { // 定义关联的数据库表 protected table = 'flx'; //禁用时间字段 public timestamps = false; // 通过下面的方法进行关联 public function article2(){ return $this->hasOne("App\Models\article2","id","author_id"); } } // 第二个表 <?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class article2 extends Model { // 定义关联的数据库表 protected table = 'flx2'; //禁用时间字段 public timestamps = false; } // 通过地下这种方式调用 public function one() { data = \App\Models\article::find(1); echo data; // 第一个表 echo $data->article2; //第二个表 .... 下面可以动态获取属性 } } // 通过地下这种方式调用 public function one() { data=\App\Models\article::find(1);echodata; // 第一个表 echo $data->article2; //第二个表 .... 下面可以动态获取属性 } } ``` 2. 1对多 ``` //hasMany //belongsto ``` 3. 多对多 基本理解: 多对多基本使用id来进行关联 一对多使用属性进行关联 ``` return $this->belongsToMany(Student::class,"course_student","course_id","student_id","course_id","student_id"); 参数说明 1. 关联的表的模型 2. 中间表名 3. 中间表本模型外键 4. 中间表关联模型外键 5. 本模型外键 6. 关联模型外键 ``` ### model各种参数说明 **1.$guarded属性,$fillable属性** $guarded属性一般是和$fillable对应的,不是一起存在但是互相使用,他们都是laravel的批量赋值方法create()的,一个设置属性参数,有点这个意思。 在create方法收集数据赋值的时候 ``` $flight = App\Flight::create(['name' => 'Flight 10']); ``` `$fillable`就像是可以被赋值属性的“白名单”,还可以选择使用`$guarded`。`$guarded`属性包含你不想被赋值的属性数组。所以不被包含在其中的属性都是可以被赋值的,因此,$guarded方法就像“黑名单”。当然,你只能同时使用其中一个——而不是一起使用: ``` $fillable属性里面的字段被填上,说明这个字段是可以赋值的,其他的所有属性不能被赋值 ``` $guarded属性里面的字段被填上,说明这个字段不可以赋值,其他的所有属性都能被赋值 所有$guarded相对来说在模型中出现频率比那个高。 **2.$dates属性** ``` protected $dates = [ 'start_time', 'close_time', 'created_at', 'updated_at' ]; ``` 里面所包含的字段,就是当使用这个属性的时候,可以直接后面跟着carbon类时间操作的任何方法,例如一个模型: ``` <?php namespace App; use Illuminate\Database\Eloquent\Model; class User extends Model{ /** * 应该被调整为日期的属性 * * @var array */ protected $dates = ['created_at', 'updated_at', 'disabled_at']; } class User extends Model{ /** * 应该被调整为日期的属性 * * @var array */ protected $dates = ['created_at', 'updated_at', 'disabled_at']; } ``` 使用到这个属性disabled,那么这个属性在$dates里面是存在的,所以他后面可以直接跟getTimestamp()方法,来各种处理。getTimestamp()方法是取时间戳的,他是carbon类下的兄弟。 ``` $user = App\User::find(1); return $user->disabled_at->getTimestamp(); ``` 如果你在$dates里面将 disabled\_at属性去除,OK,你在用getTimestamp()方法就不行了,失去了操作carbon类方法的能力 **3.$attributes属性** 默认给数据库里的一个字段赋值 ``` protected $attributes = [ 'user_limit' => 100, ]; ``` 默认给这个模型表的user\_limit字段附上100的值 **4.$timestamps属性** laravel默认会默认在create()方法创建添加数据的时候,将create\_at字段更新,如果是进行修改操作,将会更新updated\_at属性里面的值。 如果将 ``` public $timestamps = false; ``` 设为假的话,表示create方法执行时,不会对create\_at和updated\_at修改 #### hidden 和 visible 1. 隐藏字段信息 比如我的密码不能够在查询的时候显示出来 ``` protected $hidden = ['password']; ``` 2. 允许显示的 ``` protected $visible = ['first_name', 'last_name']; ``` 这里只能设置一个,不能同时,否则只会执行 $visible 3. 临时暴露隐藏属性makeVisible('password') ``` $merchant=Merchant::first()->makeVisible('password')->toArray(); print_r($merchant); ``` 4. 临时隐藏属性makeHidden('password') ``` $merchant=Merchant::first()->makeHidden('password')->toArray(); print_r($merchant); ``` ### laravel分页的使用 1 config文件一般是读取本文件的配置信息 ↩
点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消