Artisan 經常使用命令javascript
//在版本5.1.11新添加,見http://laravel-china.org/docs/5.1/5.1/authorization#creating-policies php artisan make:policy PostPolicy //針對命令顯示幫助信息 php artisan --help OR -h //抑制輸出信息 php artisan --quiet OR -q //打印 Laravel 的版本信息 php artisan --version OR -v //不詢問在任何交互性的問題 php artisan --on-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 server --port 8080 //使其在本地服務器外也可正常工做 php artisan server --host 0.0.0.0 //更改命名空間 php artisan app:name namespace //清除過時的密碼重置令牌 php artisan auth:clear-resets //清空應用緩存 php artisan cache:cache //建立緩存數據庫表 php 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 和 handlers php 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 命令php
composer create-project laravel/laravel folder_name composer install composer update composer dump-autoload [--optimize] composer self-update composer require [options] [--] [vendor/packages]...
DB類的基礎使用html
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'); // 返回 void DB::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();
Routejava
路由的基礎用法laravel
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 中間件 // 爲路由指定 Middleware Route::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(){});
Model基礎使用sql
// 定義一個 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 模型可能經過中介的 Users // 模型關聯到多個 Posts 模型(User::country_id) return $this->hasManyThrough('App\Post', 'App\User', 'country_id', 'user_id'); // 多態關聯 - Photo::imageable() return $this->morphTo(); // 多態關聯 - Staff::photos() return $this->morphMany('App\Photo', 'imageable'); // 多態關聯 - Product::photos() return $this->morphMany('App\Photo', 'imageable'); // 多態關聯 - 在 AppServiceProvider 中註冊你的「多態對照表」 Relation::morphMap([ 'Post' => App\Post::class, 'Comment' => App\Comment::class, ]); // 多態多對多關聯 - 涉及數據庫表: posts,videos,tags,taggables // Post::tags() return $this->morphToMany('App\Tag', 'taggable'); // Video::tags() return $this->morphToMany('App\Tag', 'taggable'); // Tag::posts() return $this->morphedByMany('App\Post', 'taggable'); // Tag::videos() return $this->morphedByMany('App\Video', 'taggable'); // 查找關聯 $user->posts()->where('active', 1)->get(); // 獲取全部至少有一篇評論的文章... $posts = App\Post::has('comments')->get(); // 獲取全部至少有三篇評論的文章... $posts = Post::has('comments', '>=', 3)->get(); // 獲取全部至少有一篇評論被評分的文章... $posts = Post::has('comments.votes')->get(); // 獲取全部至少有一篇評論類似於 foo% 的文章 $posts = Post::whereHas('comments', function ($query) { $query->where('content', 'like', 'foo%'); })->get(); // 預加載 $books = App\Book::with('author')->get(); $books = App\Book::with('author', 'publisher')->get(); $books = App\Book::with('author.contacts')->get(); // 延遲預加載 $books->load('author', 'publisher'); // 寫入關聯模型 $comment = new App\Comment(['message' => 'A new comment.']); $post->comments()->save($comment); // Save 與多對多關聯 $post->comments()->saveMany([ new App\Comment(['message' => 'A new comment.']), new App\Comment(['message' => 'Another comment.']), ]); $post->comments()->create(['message' => 'A new comment.']); // 更新「從屬」關聯 $user->account()->associate($account); $user->save(); $user->account()->dissociate(); $user->save(); // 附加多對多關係 $user->roles()->attach($roleId); $user->roles()->attach($roleId, ['expires' => $expires]); // 從用戶上移除單一身份... $user->roles()->detach($roleId); // 從用戶上移除全部身份... $user->roles()->detach(); $user->roles()->detach([1, 2, 3]); $user->roles()->attach([1 => ['expires' => $expires], 2, 3]); // 任何不在給定數組中的 IDs 將會從中介表中被刪除。 $user->roles()->sync([1, 2, 3]); // 你也能夠傳遞中介表上該 IDs 額外的值: $user->roles()->sync([1 => ['expires' => true], 2, 3]); 事件 Model::creating(function($model){}); Model::created(function($model){}); Model::updating(function($model){}); Model::updated(function($model){}); Model::saving(function($model){}); Model::saved(function($model){}); Model::deleting(function($model){}); Model::deleted(function($model){}); Model::observe(new FooObserver); Eloquent 配置信息 // 關閉模型插入或更新操做引起的 「mass assignment」異常 Eloquent::unguard(); // 從新開啓「mass assignment」異常拋出功能 Eloquent::reguard();
用戶認證數據庫
用戶認證 // 判斷當前用戶是否已認證(是否已登陸) Auth::check(); // 獲取當前的認證用戶 Auth::user(); // 獲取當前的認證用戶的 ID(未登陸狀況下會報錯) Auth::id(); // 經過給定的信息來嘗試對用戶進行認證(成功後會自動啓動會話) Auth::attempt(['email' => $email, 'password' => $password]); // 經過 Auth::attempt() 傳入 true 值來開啓 '記住我' 功能 Auth::attempt($credentials, true); // 只針對一次的請求來認證用戶 Auth::once($credentials); // 登陸一個指定用戶到應用上 Auth::login(User::find(1)); // 登陸指定用戶 ID 的用戶到應用上 Auth::loginUsingId(1); // 使用戶退出登陸(清除會話) Auth::logout(); // 驗證用戶憑證 Auth::validate($credentials); // Attempt to authenticate using HTTP Basic Auth // 使用 HTTP 的基本認證方式來認證 Auth::basic('username'); // Perform a stateless HTTP Basic login attempt // 執行「HTTP Basic」登陸嘗試 Auth::onceBasic(); // 發送密碼重置提示給用戶 Password::remind($credentials, function($message, $user){}); 用戶受權 // 定義權限 Gate::define('update-post', 'Class@method'); Gate::define('update-post', function ($user, $post) {...}); // 傳遞多個參數 Gate::define('delete-comment', function ($user, $post, $comment) {}); // 檢查權限 Gate::denies('update-post', $post); Gate::allows('update-post', $post); Gate::check('update-post', $post); // 指定用戶進行檢查 Gate::forUser($user)->allows('update-post', $post); // 在 User 模型下,使用 Authorizable trait User::find(1)->can('update-post', $post); User::find(1)->cannot('update-post', $post); // 攔截全部檢查 Gate::before(function ($user, $ability) {}); Gate::after(function ($user, $ability) {}); // Blade 模板語法 @can('update-post', $post) @endcan // 支持 else 表達式 @can('update-post', $post) @else @endcan // 生成一個新的策略 php artisan make:policy PostPolicy // `policy` 幫助函數 policy($post)->update($user, $post) // 控制器受權 $this->authorize('update', $post); // 指定用戶 $user 受權 $this->authorizeForUser($user, 'update', $post);