Laravel 常用知识点 + 踩坑

Laravel速查表

https://learnku.com/docs/laravel-cheatsheet/5.8

Laravel 及 web 常用:

✦ Request 
✦ Response 
✦ Session 
✦ Middleware 
✦ 文件上传 
✦ 邮件 
✦ 缓存 
✦ 队列 

###first 看一下这个 常用功能注意点

 	Laravel Telescope  优雅测试

DB:insert('insert into student(name, age) values(?, ?)' , ['sean', 18]);
没错这就是参数绑定 函数里传参 防sql注入

 默认输出是字符集的情况 对于->get()或->first()获得的数据
 判空  需要用到  isEmpty()  如  $model->isEmpty()   false 代表有值  原因在于没取到数据是一个空对象 如果用empty()无法满足判空




使用查询构造器查询数据

✦ get()  ✦ first()  ✦ where()  ✦ pluck()  ✦ lists()  ✦ select()  ✦ chuck()
// 取得数据表的所有行
DB::table('name')->get();
$users = DB::table('users')->where('votes', '>', 100)->get();
// 偏移 & 限制
$users = DB::table('users')->skip(10)->take(5)->get();

✦ Joins 
// 基本的 Join 声明语句
DB::table('users')
    ->join('contacts', 'users.id', '=', 'contacts.user_id')
    ->join('orders', 'users.id', '=', 'orders.user_id')
    ->select('users.id', 'contacts.phone', 'orders.price')
    ->get();

// 取回数据表的第一条数据
$user = DB::table('users')->where('name', 'John')->first();

// 从单行中取出单列数据
$name = DB::table('users')->where('name', 'John')->pluck('name');

// 取多行数据的「列数据」数组
$roles = DB::table('roles')->lists('title', 'name');

原始表达句
$users = DB::table('users')
                   ->select(DB::raw('count(*) as user_count, status'))
                   ->where('status', '<>', 1)
                   ->groupBy('status')
                   ->get();

$users = DB::table('users')->select('name', 'email')->get();

// 插入
$id = DB::table('users')->insertGetId(
  ['email' => 'john@example.com', 'votes' => 0]
);

// 更新
DB::table('users')
          ->where('id', 1)
          ->update(['votes' => 1]);
		  

// 删除
DB::table('users')->where('votes', '<', 100)->delete();

Model ORM

基础使用
// 定义一个 Eloquent 模型
class User extends Model {}
// 生成一个 Eloquent 模型
php artisan make:model User
// 生成一个 Eloquent 模型的时候,顺便生成迁移文件
php artisan make:model User --migration OR -m
// 指定一个自定义的数据表名称
class User extends Model {
  protected $table = 'my_users';
}

// 通过属性找到第一条相匹配的数据或创造一条新数据
Model::firstOrCreate(array('key' => 'value'));
// 通过属性找到第一条相匹配的数据或实例化一条新数据
Model::firstOrNew(array('key' => 'value'));
// 通过属性找到相匹配的数据并更新,如果不存在即创建
Model::updateOrCreate(array('search_key' => 'search_value'), array('key' => 'value'));

//通过主键查找
Model::find(1);

// 查找失败时抛出异常
Model::findOrFail(1);

// 使用where

Model::where('foo', '=', 'bar')->get();
Model::where('foo', '=', 'bar')->first();
Model::where('foo', '=', 'bar')->exists();

// 查找失败时抛出异常
Model::where('foo', '=', 'bar')->firstOrFail();

// 输出原始的查询语句
Model::where('foo', '=', 'bar')->toSql();

Model::with('relation')->get();

软删除
Model::withTrashed()->where('cars', 2)->get();
// 在查询结果中包括带被软删除的模型
Model::withTrashed()->where('cars', 2)->restore();
Model::where('cars', 2)->forceDelete();
// 查找只带有软删除的模型
Model::onlyTrashed()->where('cars', 2)->get();


模型关联
// 一对一 - User::phone()
return $this->hasOne('App\Phone', 'foreign_key', 'local_key');
// 一对一 - Phone::user(), 定义相对的关联
return $this->belongsTo('App\User', 'foreign_key', 'other_key');

// 一对多 - Post::comments()
return $this->hasMany('App\Comment', 'foreign_key', 'local_key');
//  一对多 - Comment::post()
return $this->belongsTo('App\Post', 'foreign_key', 'other_key');

// 多对多 - User::roles();
return $this->belongsToMany('App\Role', 'user_roles', 'user_id', 'role_id');

// 多对多 - 自动维护 created_at 和 updated_at 时间戳
return $this->belongsToMany('App\Role')->withTimestamps();


// 预加载
$books = App\Book::with('author')->get();
$books = App\Book::with('author', 'publisher')->get();
$books = App\Book::with('author.contacts')->get();



数据库事务处理


//自动
DB::transaction(function() {
    DB::table('users')->update(['votes' => 1]);
    DB::table('posts')->delete();
});
//手动
DB::beginTransaction();
DB::rollBack();
DB::commit();

#####Laravel 中使用 MySQL 存储过程

创建存储过程(两个参数,第一个参数为 activityid,第二个参数为 ids)
CREATE PROCEDURE update_wall_records(IN activityid INTEGER ,ids text)
BEGIN
UPDATE wall_records SET wall_activity_id = activityid
WHERE FIND_IN_SET (id,ids); # 等于 where id in ('1,2,3')
END;
//代码调用
DB::update('call update_wall_records(1,"1,2,3") ');
任务调度(订阅推荐,数据统计!!!)
windows
windows下使用laravel任务调度
Linux
* * * * * php /你的项目根目录/artisan schedule:run >> /dev/null 2>&1
linux 详情请去看官网
运行队列处理器(发送订阅邮件,自动取消订单)
Linux系统:
nohup php artisan queue:work --tries=3 &
windows系统直接打开一个命令行窗口,运行命令,不要关闭窗口即可
php artisan queue:work --tries=3

https://pengshiyu.blog.csdn.net/article/details/103341315 //部分基础高级应用

laravel 队列补充 https://www.anttoweb.com/kb/laravel-queue/

laravel 自定义目录 这是按每日记录的,想要单文件记录日志可以使用 Log::useFiles(storage_path('logs/job/error.log')); 。 到这里,日志会记录两份, 1. 是自带的日志文件内容, 2. 是自己指定的日志文件内容。 那么,只想在指定的文件里记录要肿么办呢? 只需在 Log::useDailyFiles(storage_path('logs/job/error.log')) 之前加上, $monolog = Log::getMonolog(); $monolog->popHandler();

https://www.cnblogs.com/zx-admin/p/8086792.html //Laravel 使用踩坑

记录你我
请先登录后发表评论
  • latest comments
  • 总共0条评论