邓Laravel2020-01-28ORM模型

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;
原文地址:https://www.cnblogs.com/vip-deng-vip/p/12220904.html