laravel Model protected $table = 'order'; // 白名单 只在【create】生效 protected $fillable = [ 'order_code', ];
坏:(http://james.dmzfa.com/articles/laravel-jing-hua-wen-zhang
---------------------
$request->session()->get('cart'); $request->input('name'); ---------------------
好:
session('cart'); $request->name; ---------------------
通用语法 更短、更可读的语法 Session::get('cart') session('cart')
$request->session()->get('cart') session('cart')
Session::put('cart', $data) session(['cart' => $data])
$request->input('name'), Request::get('name') $request->name, request('name')
return Redirect::back() return back()
is_null($object->relation) ? $object->relation->id : null } optional($object->relation)->id
return view('index')->with('title', $title)->with('client', $client) return view('index', compact('title', 'client'))
$request->has('value') ? $request->value : 'default'; $request->get('value', 'default')
Carbon::now(), Carbon::today() now(), today()
App::make('Class') ------------------ app('Class')
->where('column', '=', 1) ->where('column', 1)
->orderBy('created_at', 'desc') ->latest()
->orderBy('age', 'desc') ->latest('age')
->orderBy('created_at', 'asc') ->oldest()
->select('id', 'name')->get() ->get(['id', 'name'])
->first()->name ->value('name')
ORM
1.一对一
hasOne $this->hasOne('外键的模型名称','外键的id','自己表里对应的id')
// demo一对一 用户表里又area_id与地区表id一致 用户表和地区表
$data = User::find(1)->area; // 控制器
public function area() // 模型 { return $this->hasOne('AppCommonModelArea', 'id', 'area_id'); }
// 返回的只是 第一个用户的地区
belongsTo $this->belongTo('外键的模型名称','外键的id','自己表里对应的id')
$data = Area::find(142)->user; // 控制器
// orm
public function user()
{
return $this->belongsTo('AppCommonModelUser','id','area_id');
}
// 返回的只是 area_id=142的第一个用户
---------------------------------------------
一对多
hasMany 模型,外键的id,自己模型的id
$data = User::find(1)->needList;
$data = User::find(1)->needList()->where('id','>',2)->get();
/**
* 获取当前用户发布的所有的需求
*
* @return HasMany
* @author: deng (2020/2/17 18:53)
*/
public function needList()
{
return $this->hasMany('AppCommonModelNeed','user_id','id');
}
【逆】
$data = Need::find(1)->user->mobile;
public function user()
{
return $this->belongsTo('AppCommonModelUser','user_id','id');
}
------------------------------------------------
获取所有的需求,并返回用户信息
$data = Need::with(['user'])->get();
public function user()
{
return $this->belongsTo('AppCommonModelUser','user_id','id');
}
多对多:【完】
belongsToMany()
/**
* 用户拥有哪些角色(多对多) 【当前类为:管理员模型Admin 】
*
* @author: deng (2020-03-14 14:45)
*/
public function role()
{
// belongsToMany(角色表的模型,中间的关系表,关系表中的字段外键【对应的自己的表id】,关系表中的字段外键【对应角色表的id】)
// 取出关系表中字段
return $this->belongsToMany(AdminRole::class,'d_admin_role_relation','admin_id','role_id')
->withPivot(['admin_id', 'role_id']);
}
Artisans
$users = AppUser::cursor()->filter(function ($user) { return $user->id > 500; });
/**
* Register a binding with the container.
*
* @param string|array $abstract
* @param Closure|string|null $concrete
* @param bool $shared
* @return void
*
* @throws Exception
*/
public function bind($abstract, $concrete = null, $shared = false)
{
//
}
php artisan make:migration add_mobile_open_id_table 创建表
php artisan migrate 更新表
public function getNickNameAttribute($value) { if ($value) { $nick_name = htmlentities(base64_decode($value))?:''; } else { $nick_name = '未填'; } return $nick_name; }
.
获取原数据: $userFind->getOriginal('avatar'))
常用语句:
助手函数路径 vendorlaravelframeworksrcIlluminateSupporthelpers.php config('app.cdn_domain') 读取配置 env('CDN_DOMAIN') 只在配置文件使用的读取 $path = app_path(); 返回app路径C:wwwlaravelapp, $path = base_path(); 项目根目录,C:wwwlaravel $path = config_path();配置路径C:wwwlaravelconfig $path = public_path(); 返回public路径C:wwwlaravelpublic,路径函数都支持生成文件路径 $path = resource_path('assets/sass/app.scss'); 资源路径;C:wwwlaravel esourcesassets/sass/app.scss $path = storage_path('app/file.txt');文件存储路径C:wwwlaravelstorageapp/file.txt __("lang.test") //本地化,lang是文件,配置'locale' => 'zh-CN' trans("lang.test")只翻译键 e('<html>foo</html>') 输出源代码 str_contains('This is my name', 'my'); 是否包含某个值 str_limit('我是中国人', 3, '...') 截取字符串 中文3个一个汉字 str_random(40) 随机字符串 asset('img/photo.jpg') 生成完整包含http/https路径 secure_asset()只生成https url('user/profile', ['id'=>1])http://laravel.api.shanliwawa.top/user/profile/1 secure_url只生成https url()->full() 当前完整域名 $cookie = cookie('name', 'value', $minutes); {{ csrf_field() }} 生成令牌 $token = csrf_token(); 获取令牌 encrypt() decrypt() 加密解密 dump()打印变量 dd() 打印后停止 info('Some helpful information!'); 写入日志 logger('Debug message'); 错误写入日志 redirect('/home'); 跳转 $value = session('key'); session(['chairs' => 7, 'instruments' => 3]); 获取设置session use IlluminateSupportFacadesHash; Hash::make($request->newPassword) 加密密码 助手加密解密函数,支持字符串数组对象 encrypt() decrypt() use IlluminateSupportFacadesCrypt;无序列化加密 $encrypted = Crypt::encryptString('Hello world.'); $decrypted = Crypt::decryptString($encrypted); Crypt::encrypt() 支持字符串数组对象 Crypt::decrypt() use IlluminateHttpRequest 是请求对象数据处理 $request->input('title'); 获取输入 $site = $request->input('site', 'Laravel学院'); 请求为空取后边值 $request->input('books.0.author') 数组获取单值 $request->json(); 返回JSON数据格式 $request->all(); 全部 $request->except('id');排除 $request->only(['name', 'site', 'domain']); 只获取这些字段 $request->has('id') 判断id字段是否存在
数据库:
use IlluminateSupportFacadesDB;
----------------
排序:
->orderBy('created_at','desc') 排序
->first() 一行
->update(['status','=',1]); 更新
->delete(); 删除
---------------- DB::select("select * from users where name=?",['admin']); //也支持name=:name,[':name'=>'admin']绑定,返回obj DB::insert('insert into users (id, name) values (?, ?)', [1, 'Dayle']); $affected = DB::update('update users set votes = 100 where name = ?', ['John']); 返回影响行数 $deleted = DB::delete('delete from users');返回影响行数 DB::statement('drop table users'); 其他无返回语句 DB::transaction(function () { 事务 DB::table('users')->update(['votes' => 1]); DB::table('posts')->delete(); }); $list = DB::table("users")->get()->toArray();//获取全部转换成数组 DB::table("users")->first() 获取一行 DB::table("users")->value('email'); 获取一个字段 DB::table("users")->pluck('email')->toArray(); 获取一列,如果设置两个pluck('name','id') id是键name是值的键值数组 count() 结果集数量 max('price')最大值 min('price')最小值 avg('price')平均数 sum('price')求和 DB::table('users')->select('name', 'email as user_email')->get(); 返回特定字段 whereRaw('price > IF(state = "TX", ?, 100)', [200]) 原生where orderBy('name', 'desc') inRandomOrder()随机排序 join('contacts', 'users.id', '=', 'contacts.user_id') 内连接 leftJoin('posts', 'users.id', '=', 'posts.user_id') 左连接 groupBy('account_id') 分组 groupBy('first_name', 'status') having('account_id', '>', 100) 刷选 take(5) 返回5条 ->offset(10) ->limit(5) 限制 insert( ['email' => 'john@example.com', 'votes' => 0]); 插入 支持多条数据 $id=DB::table("users")-> insertGetId( ['email' => 'john@example.com', 'votes' => 0]); 插入后返回id update(['votes' => 1]); 更新 increment('votes', 5);decrement('votes', 5);自增自减 increment('votes', 1, ['name' => 'John']); 支持其他字段更新 DB::table('users')->truncate(); 清空表 DB::table('users')->where('votes', '>', 100)->delete(); 删除 $users = DB::table('users')->paginate(15); 分页 $users = DB::table('users')->simplePaginate(15); 简单分页只有上一页下一页 $results->total() 总页数 <div class="container"> @foreach ($users as $user) {{ $user->name }} @endforeach </div> {{ $users->links() }}
1.追加属性(获取器)
protected $table = 'd_avatar'; protected $appends = [ 'Demo' ]; /** * Model追加属性 * * @param string $value * @return string */ public function getDemoAttribute($value) { return 'demo'; }
public function getNickNameAttribute($value)
{
return htmlentities(base64_decode($value));
}
模型关联
【一对多】
// 控制器 public function index() { $banner = Banner::find(1); $list = $banner->bannerList; return $this->success($list); } /** * 获取轮播图列表 [一对多] */ public function bannerList() { return $this->hasMany('AppCommonModelBannerItem','banner_id','id'); }
缓存
$key = 'avatar_type'; $data = Cache::get($key); if (!$data) { // 不存在时 $minutes = 60*60*5; $data = AvatarType::all(); Cache::put($key, $data, $minutes); }
路由
Route::get('/', function () { //首页路由 return view('welcome'); }); Route::get('about', function () { //关于我们 return view('about'); }); Route::post('/', function () {}); Route::put('/', function () {}); Route::delete('/', function () {}); Route::match(['get', 'post'], '/', function () {}); Route::get('/', 'WelcomeController@index');//AppHttpControllersWelcomeController 控制器的 index 方法进行处理 Route::get('user/{id}', function ($id) {//路由参数 return "用户ID: " . $id; }); Route::middleware('auth')->group(function () {//中间件与分组 Route::get('dashboard', function () { return view('dashboard'); }); Route::get('account', function () { return view('account'); }); }); Route::get('/task', 'TaskController@home');指向控制器的路由 return view('home', ['tasks' => Task:all()]); //视图传递数组,Task是控制器,也可以是数组$tasks return view('home')->share('siteName', 'Laravel学院');//共享变量 视图中 <a href="{{ url('/') }}"> 路由命令与调用 Route::get('user/{id?}', function ($id = 1) { return "用户ID: " . $id; })->name('user.profile'); <a href="{{ route('user.profile', [100]) }}">
OPTIONS请求
/**
* 设置公用响应头【此文件放置在index.php下】
*
* @return string
* @author deng (2019/12/11 17:40)
*/
function setHeader()
{
// 公共响应头
header('Content-Type: Application/json');
// 如果需要跨域,写在这里
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Headers: x-token,user-type,Origin,Access-Control-Request-Headers,SERVER_NAME,Access-Control-Allow-Headers,cache-control,token, X-Requested-With,Content-Type,Accept,Connection,User-Agent,Cookie');
header('Access-Control-Allow-Methods: POST, GET, OPTIONS, PUT, DELETE');
}
Route::options('/{all}', function(Request $request) {// 如果是options请求,直接响应 if (request()->method() == 'OPTIONS') { return response()->json([ 'code' => 200, 'message' => 'OPTIONS', 'data' => 'OPTIONS', ]); } })->where(['all' => '([a-zA-Z0-9-]|/)+']);
Storage文件存储 上传文件
$request->file()->store() 快速存储图片
路径:storage/public目录下
------------
1、获取上传的文件
$file=$request->file('file');
2、获取上传文件的文件名(带后缀,如abc.png)
$filename=$file->getClientOriginalName();
3、获取上传文件的后缀(如abc.png,获取到的为png)
$fileextension=$file->getClientOriginalExtension();
4、获取上传文件的大小
$filesize=$file->getClientSize();
5、获取缓存在tmp目录下的文件名(带后缀,如php8933.tmp)
$filaname=$file->getFilename();
6、获取上传的文件缓存在tmp文件夹下的绝对路径
$realpath=$file->getRealPath();
7、将缓存在tmp目录下的文件移到某个位置,返回的是这个文件移动过后的路径
$path=$file->move(path,newname);
move()方法有两个参数,第一个参数是文件移到哪个文件夹下的路径,第二个参数是将上传的文件重新命名的文件名
8、检测上传的文件是否合法,返回值为true或false
$file->isValid()
打印sql
DB::connection()->enableQueryLog(); // 开启QueryLog AppUser::find(1); dump(DB::getQueryLog());
.
$data = User::find(1)->area;