laravel 框架的使用
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
{
}
-
路由的基本使用
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");
graph TB
A[Request]--->B(获取请求)
B--->c[input]
A--->D(加入缓存)
D--->E[flash]
数据库的操作
对于数据的操作都是在模型中完成,但是如果不使用 Model ,我们也可以使用 DB类 来创建
数据表的创建与配置
-
建立数据库
-
sql 语句 -
图形界面 -
在config->database.php文件中配置 如果是在php artisan serve方式启动的,修改了配置文件,则需要重新启动,才能读取修改后的配置文件,如果是wamp/lamp等环境则不需要重启; -
数据库的增删改查 public function add()
{
$db = DB::table("users");
$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");
$data = $db ->where('id','=','2') ->get();
dd($data);
}
$db->orderBy('age','desc')->get();
1. 执行任意的 insert , delete , update 语句
DB::statement
2. 执行任意的 select 语句
DB::select
视图操作
return view("index");
1. return view("index",["ni"=>"ni","wo"="wo"]);
2. return view("index")->with("ni","ni")->with("wo","wo");
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() }}
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
php artisan migrate
注: 如果是第一次执行文件的话,则必须执行
php artisan migrate:install
给表添加注释
- 下载
composer require zedisdog/laravel-schema-extend
-
修改config->app.php->aliases 'aliases' => [
...
'Schema' => Jialeo\LaravelSchemaExtend\Schema::class,
],
-
使用
默认创建的migration文件对应的“Schema”还是引用的laravel自带的,需要修改为该组件包的引用
use Jialeo\LaravelSchemaExtend\Schema;
1. php artisan make:migration CreateTestTable
2. php artisan migrate:fresh
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
{
public function up()
{
Schema::create('paper', function (Blueprint $table) {
$table->id();
$table->timestamps();
});
}
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
数据类型结构
*Blueprint类中的方法方法 <-> 数据库数据类型
*
*/
increments();
bigInteger();
unsignedBigInteger();
integer();
unsignedInteger();
mediumInteger();
unsignedMediumInteger()
smallInteger();
tinyInteger();
boolean();
decimal();
unsignedDecimal();
double();
float();
binary();
boolean();
char();
uuid();
string();
remember_token();
ipAddress();
macAddress();
text();
longText();
mediumText();
enum();
lineString();
multiLineString();
year();
date();
dateTime();
time();
timeTz();
timestamp();
point();
multiPoint();
Polygon();
multiPolygon();
创建填充器
-
创建 php artisan make:seeder
<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
class n1Seeder extends Seeder
{
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的验证码
- 🔍 搜索captcha
- 使用命令行下载 composer require mews/captcha
- 使用命令进行配置 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");
});
facade
Contracts
ajax请求的响应
-
返回json
return json_encode($data);
return response()->json($data);
注:php是不能直接发回boolean类型的数据的
-
跳转响应(重定向) return redirect(路由);
回话控制
-
存 Session::put("name","value");
-
拿 Session::get("name");
Session::all();
-
删 Session::forget("name");
Session::flush();
-
判断 Session::has("name");
缓存控制
配置
Laravel 为不同的缓存系统提供了统一的 API。缓存配置位于 config/cache.php 。在该文件中你可以指定在应用中默认使用哪个缓存驱动。Laravel 开箱支持主流的缓存后端如 Memcached 和 Redis 等。
缓存配置文件还包含其他文档化的选项,确保仔细阅读这些选项。默认情况下,Laravel 被配置成使用文件缓存(file 驱动),这会将序列化数据和缓存对象存储到文件系统。对于大型应用,建议使用内存缓存如 Memcached 或 APC,你甚至可以为同一驱动配置多个缓存配置。
-
设置缓存 存在,覆盖 Cache::put("key","value",$minutes);
存在,不覆盖 Cache::add("key","value",$minutes);
-
删除缓存 Cache::forever("key","value");
-
获取缓存 Cache::get("name");
联表查询
跟数据库一样
关联模型
-
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; //第二个表
.... 下面可以动态获取属性
}
}
-
1对多
-
多对多 基本理解: 多对多基本使用id来进行关联 一对多使用属性进行关联 $this->belongsToMany(Student::class,"course_student","course_id","student_id","course_id","student_id");
参数说明
1. 关联的表的模型
2. 中间表名
3. 本模型外键
4. 关联模型外键
5. 中间表本模型外键
5. 中间表关联模型外键
model各种参数说明
1.
g
u
a
r
d
e
d
属
性
,
guarded属性,
guarded属性,fillable属性
g
u
a
r
d
e
d
属
性
一
般
是
和
guarded属性一般是和
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{
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
-
隐藏字段信息 比如我的密码不能够在查询的时候显示出来 protected $hidden = ['password'];
-
允许显示的 protected $visible = ['first_name', 'last_name'];
这里只能设置一个,不能同时,否则只会执行 $visible -
临时暴露隐藏属性makeVisible(‘password’) $merchant=Merchant::first()->makeVisible('password')->toArray(); print_r($merchant);
-
临时隐藏属性makeHidden(‘password’) $merchant=Merchant::first()->makeHidden('password')->toArray(); print_r($merchant);
|