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
-
创建
php artisan make:Controller
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;// 命名空间的三元素: 常量,方法,类
class ni extends Controller
{
//
}
class ni extends Controller
{
//
}
-
路由的基本使用
//跟路由
Route::get("/",function(){
});
router->any("/home",function()
{
echo "这是/home";
});
router->match(['get',"post"],"/home",function (){
echo "这是/home";
});
// 路由参数
// 必选参数
router->get("/home{id}",function(){
echo id;
});
// 可选参数
router->get("/home{id?}",function(){
echo id;
});
// 路由别名
router->get("/home{id?}",function(){
echo id;
}) -> name("route");
// 查看路由
php artisan route:list
// 路由群组
Route::group(['prefix'=>"admin"],function(){
});
-
控制器路由
Route::请求方法(路由表达式,‘控制器@方法’)
-
控制器分目录管理
后台管理
php artisan make:controller admin/controller
前代管理
php artisan make:controller home/controller
-
接受用户输入
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类 来创建
数据表的创建与配置
-
建立数据库
-
sql 语句
-
图形界面
-
在config->database.php文件中配置
如果是在php artisan serve方式启动的,修改了配置文件,则需要重新启动,才能读取修改后的配置文件,如果是wamp/lamp等环境则不需要重启;
-
数据库的增删改查
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 ->where('id','=','2') ->get();
dd($data);
}
// where()->where()->where() 这是并且关系
// where()->orWhere()->orWhere() 这是或者关系
// 按照指定的字段进行特定规则的排序
$db->orderBy('age','desc')->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->get("wo", function () {
if (View::exists("welcome")) {
echo '视图存在';
} else {
echo '视图不存在';
}
});
数据库模型
// 创建数据库表的模型
// 必选
protected $table = "users";
// 可选,禁用时间戳
protected $timestamps = false;
-
模型插入
$this->insert([]);
-
模型查询
$this->where('id','=','1')->get();
-
模型修改
$this->where('id','=','1')->update([]);
-
模型删除
$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
composer require zedisdog/laravel-schema-extend
-
修改config->app.php->aliases
'aliases' => [
...
// 'Schema' => Illuminate\Support\Facades\Schema::class,
'Schema' => Jialeo\LaravelSchemaExtend\Schema::class,
],
-
使用
默认创建的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文件一般是读取本文件的配置信息 ↩