// 在版本 5.1.11 新添加,见 http://d.laravel-china.org/docs/5.1/authorization#creating-policiesphp artisan make:policy PostPolicy// 针对命令显示帮助信息php artisan --help OR -h// 抑制输出信息php artisan --quiet OR -q// 打印 Laravel 的版本信息php artisan --version OR -V// 不询问任何交互性的问题php artisan --no-interaction OR -n// 强制输出 ANSI 格式php artisan --ansi// 禁止输出 ANSI 格式php artisan --no-ansi// 显示当前命令行运行的环境php artisan --env// -v|vv|vvv 通过增加 v 的个数来控制命令行输出内容的详尽情况: 1 个代表正常输出, 2 个代表输出更多消息, 3 个代表调试php artisan --verbose// 移除编译优化过的文件 (storage/frameworks/compiled.php)php artisan clear-compiled// 显示当前框架运行的环境php artisan env// 显示某个命令的帮助信息php artisan help// 显示所有可用的命令php artisan list// 进入应用交互模式php artisan tinker// 进入维护模式php artisan down// 退出维护模式php artisan up// 优化框架性能// --force 强制编译已写入文件 (storage/frameworks/compiled.php)// --psr 不对 Composer 的 dump-autoload 进行优化php artisan optimize [--force] [--psr]// 启动内置服务器php artisan serve// 更改默认端口php artisan serve --port 8080// 使其在本地服务器外也可正常工作php artisan serve --host 0.0.0.0// 更改应用命名空间php artisan app:name namespace// 清除过期的密码重置令牌php artisan auth:clear-resets// 清空应用缓存php artisan cache:clear// 创建缓存数据库表 migrationphp artisan cache:table// 合并所有的配置信息为一个,提高加载速度php artisan config:cache// 移除配置缓存文件php artisan config:clear// 程序内部调用 Artisan 命令$exitCode = Artisan::call('config:cache');// 运行所有的 seed 假数据生成类// --class 可以指定运行的类,默认是: "DatabaseSeeder"// --database 可以指定数据库// --force 当处于生产环境时强制执行操作php artisan db:seed [--class[="..."]] [--database[="..."]] [--force]// 基于注册的信息,生成遗漏的 events 和 handlersphp artisan event:generate// 生成新的处理器类// --command 需要处理器处理的命令类名字php artisan handler:command [--command="..."] name// 创建一个新的时间处理器类// --event 需要处理器处理的事件类名字// --queued 需要处理器使用队列话处理的事件类名字php artisan handler:event [--event="..."] [--queued] name// 生成应用的 key(会覆盖)php artisan key:generate// 在默认情况下, 这将创建未加入队列的自处理命令// 通过 --handler 标识来生成一个处理器, 用 --queued 来使其入队列.php artisan make:command [--handler] [--queued] name// 创建一个新的 Artisan 命令// --command 命令被调用的名称。 (默认为: "command:name")php artisan make:console [--command[="..."]] name// 创建一个新的资源控制器// --plain 生成一个空白的控制器类php artisan make:controller [--plain] name
php artisan make:controller App\\Admin\\Http\\Controllers\\DashboardController// 创建一个新的事件类php artisan make:event name// 创建一个新的中间件类php artisan make:middleware name// 创建一个新的迁移文件// --create 将被创建的数据表.// --table 将被迁移的数据表.php artisan make:migration [--create[="..."]] [--table[="..."]] name// 创建一个新的 Eloquent 模型类php artisan make:model name// 创建一个新的服务提供者类php artisan make:provider name// 创建一个新的表单请求类php artisan make:request name// 数据库迁移// --database 指定数据库连接(下同)// --force 当处于生产环境时强制执行,不询问(下同)// --path 指定单独迁移文件地址// --pretend 把将要运行的 SQL 语句打印出来(下同)// --seed Seed 任务是否需要被重新运行(下同)php artisan migrate [--database[="..."]] [--force] [--path[="..."]] [--pretend] [--seed]// 创建迁移数据库表php artisan migrate:install [--database[="..."]]// 重置并重新运行所有的 migrations// --seeder 指定主 Seeder 的类名php artisan migrate:refresh [--database[="..."]] [--force] [--seed] [--seeder[="..."]]// 回滚所有的数据库迁移php artisan migrate:reset [--database[="..."]] [--force] [--pretend]// 回滚最最近一次运行的迁移任务php artisan migrate:rollback [--database[="..."]] [--force] [--pretend]// migrations 数据库表信息php artisan migrate:status// 为队列数据库表创建一个新的迁移php artisan queue:table// 监听指定的队列// --queue 被监听的队列// --delay 给执行失败的任务设置延时时间 (默认为零: 0)// --memory 内存限制大小,单位为 MB (默认为: 128)// --timeout 指定任务运行超时秒数 (默认为: 60)// --sleep 等待检查队列任务的秒数 (默认为: 3)// --tries 任务记录失败重试次数 (默认为: 0)php artisan queue:listen [--queue[="..."]] [--delay[="..."]] [--memory[="..."]] [--timeout[="..."]] [--sleep[="..."]] [--tries[="..."]] [connection]// 查看所有执行失败的队列任务php artisan queue:failed// 为执行失败的数据表任务创建一个迁移php artisan queue:failed-table// 清除所有执行失败的队列任务php artisan queue:flush// 删除一个执行失败的队列任务php artisan queue:forget// 在当前的队列任务执行完毕后, 重启队列的守护进程php artisan queue:restart// 对指定 id 的执行失败的队列任务进行重试(id: 失败队列任务的 ID)php artisan queue:retry id// 指定订阅 Iron.io 队列的链接// queue: Iron.io 的队列名称.// url: 将被订阅的 URL.// --type 指定队列的推送类型.php artisan queue:subscribe [--type[="..."]] queue url// 处理下一个队列任务// --queue 被监听的队列// --daemon 在后台模式运行// --delay 给执行失败的任务设置延时时间 (默认为零: 0)// --force 强制在「维护模式下」运行// --memory 内存限制大小,单位为 MB (默认为: 128)// --sleep 当没有任务处于有效状态时, 设置其进入休眠的秒数 (默认为: 3)// --tries 任务记录失败重试次数 (默认为: 0)php artisan queue:work [--queue[="..."]] [--daemon] [--delay[="..."]] [--force] [--memory[="..."]] [--sleep[="..."]] [--tries[="..."]] [connection]// 生成路由缓存文件来提升路由效率php artisan route:cache// 移除路由缓存文件php artisan route:clear// 显示已注册过的路由php artisan route:list// 运行计划命令php artisan schedule:run// 为 session 数据表生成迁移文件php artisan session:table// 从 vendor 的扩展包中发布任何可发布的资源// --force 重写所有已存在的文件// --provider 指定你想要发布资源文件的服务提供者// --tag 指定你想要发布标记资源.php artisan vendor:publish [--force] [--provider[="..."]] [--tag[="..."]]php artisan tail [--path[="..."]] [--lines[="..."]] [connection]
composer create-project laravel/laravel folder_name
composer install
composer update
composer dump-autoload [--optimize]composer self-update
composer require [options] [--] [vendor/packages]...
Config::get('app.timezone');//指定默认值Config::get('app.timezone', 'UTC');Config::set('database.default', 'sqlite');
Route::get('foo', function(){});Route::get('foo', 'ControllerName@function');Route::controller('foo', 'FooController');
资源路由
Route::resource('posts','PostsController');// 资源路由器只允许指定动作通过Route::resource('photo', 'PhotoController',['only' => ['index', 'show']]);Route::resource('photo', 'PhotoController',['except' => ['update', 'destroy']]);
触发错误
App::abort(404);$handler->missing(...) in ErrorServiceProvider::boot();throw new NotFoundHttpException;
路由参数
Route::get('foo/{bar}', function($bar){});Route::get('foo/{bar?}', function($bar = 'bar'){});
HTTP 请求方式
Route::any('foo', function(){});Route::post('foo', function(){});Route::put('foo', function(){});Route::patch('foo', function(){});Route::delete('foo', function(){});// RESTful 资源控制器Route::resource('foo', 'FooController');// 为一个路由注册多种请求方式Route::match(['get', 'post'], '/', function(){});
安全路由 (TBD)
Route::get('foo', array('https', function(){}));
路由约束
Route::get('foo/{bar}', function($bar){})->where('bar', '[0-9]+');Route::get('foo/{bar}/{baz}', function($bar, $baz){})->where(array('bar' => '[0-9]+', 'baz' => '[A-Za-z]'))
// 设置一个可跨路由使用的模式Route::pattern('bar', '[0-9]+')
HTTP 中间件
// 为路由指定 MiddlewareRoute::get('admin/profile', ['middleware' => 'auth', function(){}]);Route::get('admin/profile', function(){})->middleware('auth');
命名路由
Route::currentRouteName();Route::get('foo/bar', array('as' => 'foobar', function(){}));Route::get('user/profile', ['as' => 'profile', 'uses' => 'UserController@showProfile']);Route::get('user/profile', 'UserController@showProfile')->name('profile');$url = route('profile');$redirect = redirect()->route('profile');
路由前缀
Route::group(['prefix' => 'admin'], function(){Route::get('users', function(){return 'Matches The "/admin/users" URL';});});
路由命名空间
// 此路由组将会传送 'Foo\Bar' 命名空间Route::group(array('namespace' => 'Foo\Bar'), function(){})
子域名路由
// {sub} 将在闭包中被忽略Route::group(array('domain' => '{sub}.example.com'), function(){});
$environment = app()->environment();$environment = App::environment();$environment = $app->environment();// 判断当环境是否为 localif ($app->environment('local')){}// 判断当环境是否为 local 或 staging...if ($app->environment('local', 'staging')){}
// 记录器提供了 7 种在 RFC 5424 标准内定义的记录等级:// debug, info, notice, warning, error, critical, and alert.Log::info('info');Log::info('info',array('context'=>'additional info'));Log::error('error');Log::warning('warning');// 获取 monolog 实例Log::getMonolog();// 添加监听器Log::listen(function($level, $message, $context) {});
记录 SQL 查询语句
// 开启 logDB::connection()->enableQueryLog();// 获取已执行的查询数组DB::getQueryLog();
URL::full();URL::current();URL::previous();URL::to('foo/bar', $parameters, $secure);URL::action('NewsController@item', ['id'=>123]);// 需要在适当的命名空间内URL::action('Auth\AuthController@logout');URL::action('FooController@method', $parameters, $absolute);URL::route('foo', $parameters, $absolute);URL::secure('foo/bar', $parameters);URL::asset('css/foo.css', $secure);URL::secureAsset('css/foo.css');URL::isValidUrl('http://example.com');URL::getRequest();URL::setRequest($request);
Event::fire('foo.bar', array($bar));// 注册一个事件监听器.// void listen(string|array $events, mixed $listener, int $priority)Event::listen('App\Events\UserSignup', function($bar){});Event::listen('foo.*', function($bar){});Event::listen('foo.bar', 'FooHandler', 10);Event::listen('foo.bar', 'BarHandler', 5);// 你可以直接在处理逻辑中返回 false 来停止一个事件的传播.Event::listen('foor.bar', function($event){ return false; });Event::subscribe('UserEventHandler');
基本使用
DB::connection('connection_name');// 运行数据库查询语句$results = DB::select('select * from users where id = ?', [1]);$results = DB::select('select * from users where id = :id', ['id' => 1]);// 运行普通语句DB::statement('drop table users');// 监听查询事件DB::listen(function($sql, $bindings, $time){ code_here; });// 数据库事务处理DB::transaction(function(){DB::table('users')->update(['votes' => 1]);DB::table('posts')->delete();});DB::beginTransaction();DB::rollBack();DB::commit();
查询语句构造器
// 取得数据表的所有行DB::table('name')->get();// 取数据表的部分数据DB::table('users')->chunk(100, function($users){ foreach ($users as $user) { // }});// 取回数据表的第一条数据$user = DB::table('users')->where('name', 'John')->first();DB::table('name')->first();// 从单行中取出单列数据$name = DB::table('users')->where('name', 'John')->pluck('name');DB::table('name')->pluck('column');// 取多行数据的「列数据」数组$roles = DB::table('roles')->lists('title');$roles = DB::table('roles')->lists('title', 'name');// 指定一个选择字句$users = DB::table('users')->select('name', 'email')->get();$users = DB::table('users')->distinct()->get();$users = DB::table('users')->select('name as user_name')->get();// 添加一个选择字句到一个已存在的查询语句中$query = DB::table('users')->select('name');$users = $query->addSelect('age')->get();// 使用 Where 运算符$users = DB::table('users')->where('votes', '>', 100)->get();$users = DB::table('users') ->where('votes', '>', 100) ->orWhere('name', 'John') ->get();$users = DB::table('users') ->whereBetween('votes', [1, 100])->get();$users = DB::table('users') ->whereNotBetween('votes', [1, 100])->get();$users = DB::table('users') ->whereIn('id', [1, 2, 3])->get();$users = DB::table('users') ->whereNotIn('id', [1, 2, 3])->get();$users = DB::table('users') ->whereNull('updated_at')->get();DB::table('name')->whereNotNull('column')->get();// 动态的 Where 字句$admin = DB::table('users')->whereId(1)->first();$john = DB::table('users') ->whereIdAndEmail(2, 'john@doe.com') ->first();$jane = DB::table('users') ->whereNameOrAge('Jane', 22) ->first();// Order By, Group By, 和 Having$users = DB::table('users') ->orderBy('name', 'desc') ->groupBy('count') ->having('count', '>', 100) ->get();DB::table('name')->orderBy('column')->get();DB::table('name')->orderBy('column','desc')->get();DB::table('name')->having('count', '>', 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();// Left Join 声明语句DB::table('users')->leftJoin('posts', 'users.id', '=', 'posts.user_id')->get();// select * from users where name = 'John' or (votes > 100 and title <> 'Admin')DB::table('users') ->where('name', '=', 'John') ->orWhere(function($query) {
$query->where('votes', '>', 100) ->where('title', '<>', 'Admin'); }) ->get();
聚合
$users = DB::table('users')->count();$price = DB::table('orders')->max('price');$price = DB::table('orders')->min('price');$price = DB::table('orders')->avg('price');$total = DB::table('users')->sum('votes');
原始表达句
$users = DB::table('users') ->select(DB::raw('count(*) as user_count, status')) ->where('status', '<>', 1) ->groupBy('status') ->get();// 返回行DB::select('select * from users where id = ?', array('value'));DB::insert('insert into foo set bar=2');DB::update('update foo set bar=2');DB::delete('delete from bar');// 返回 voidDB::statement('update foo set bar=2');// 在声明语句中加入原始的表达式DB::table('name')->select(DB::raw('count(*) as count, column2'))->get();
Inserts / Updates / Deletes / Unions / Pessimistic Locking
// 插入DB::table('users')->insert( ['email' => 'john@example.com', 'votes' => 0]);$id = DB::table('users')->insertGetId( ['email' => 'john@example.com', 'votes' => 0]);DB::table('users')->insert([ ['email' => 'taylor@example.com', 'votes' => 0], ['email' => 'dayle@example.com', 'votes' => 0]]);// 更新DB::table('users') ->where('id', 1) ->update(['votes' => 1]);DB::table('users')->increment('votes');DB::table('users')->increment('votes', 5);DB::table('users')->decrement('votes');DB::table('users')->decrement('votes', 5);DB::table('users')->increment('votes', 1, ['name' => 'John']);// 删除DB::table('users')->where('votes', '<', 100)->delete();DB::table('users')->delete();DB::table('users')->truncate();// 集合// unionAll() 方法也是可供使用的,调用方式与 union 相似$first = DB::table('users')->whereNull('first_name');$users = DB::table('users')->whereNull('last_name')->union($first)->get();// 消极锁DB::table('users')->where('votes', '>', 100)->sharedLock()->get();DB::table('users')->where('votes', '>', 100)->lockForUpdate()->get();
基础使用
// 定义一个 Eloquent 模型class User extends Model {}// 生成一个 Eloquent 模型php artisan make:model User// 指定一个自定义的数据表名称class User extends Model { protected $table = 'my_users';}
More
Model::create(array('key' => 'value'));// 通过属性找到第一条相匹配的数据或创造一条新数据Model::firstOrCreate(array('key' => 'value'));// 通过属性找到第一条相匹配的数据或实例化一条新数据Model::firstOrNew(array('key' => 'value'));// 通过属性找到相匹配的数据并更新,如果不存在即创建Model::updateOrCreate(array('search_key' => 'search_value'), array('key' => 'value'));// 使用属性的数组来填充一个模型, 用的时候要小心「Mass Assignment」安全问题 !Model::fill($attributes);Model::destroy(1);Model::all();Model::find(1);// 使用双主键进行查找Model::find(array('first', 'last'));// 查找失败时抛出异常Model::findOrFail(1);// 使用双主键进行查找, 失败时抛出异常Model::findOrFail(array('first', 'last'));Model::where('foo', '=', 'bar')->get();Model::where('foo', '=', 'bar')->first();Model::where('foo', '=', 'bar')->exists();// 动态属性查找Model::whereFoo('bar')->first();// 查找失败时抛出异常Model::where('foo', '=', 'bar')->firstOrFail();Model::where('foo', '=', 'bar')->count();Model::where('foo', '=', 'bar')->delete();// 输出原始的查询语句Model::where('foo', '=', 'bar')->toSql();Model::whereRaw('foo = bar and cars = 2', array(20))->get();Model::on('connection-name')->find(1);Model::with('relation')->get();Model::all()->take(10);Model::all()->skip(10);// 默认的 Eloquent 排序是上升排序Model::all()->orderBy('column');Model::all()->orderBy('column','desc');
软删除
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');// 多对多 - Role::users();return $this->belongsToMany('App\User');// 多对多 - Retrieving Intermediate Table Columns$role->pivot->created_at;// 多对多 - 中介表字段return $this->belongsToMany('App\Role')->withPivot('column1', 'column2');// 多对多 - 自动维护 created_at 和 updated_at 时间戳return $this->belongsToMany('App\Role')->withTimestamps();// 远层一对多 - Country::posts(), 一个 Country 模型可能通过中介的 User
评论 (2)
涉及广告推广,审核未通过
Jan 18 2021 01:05 pm