Laravel 常用操作

基于5.1


零 抽活、關(guān)閉debug

.env文件

APP_DEBUG=false

一院领、Laravel 數(shù)據(jù)庫操作

1.1查詢構(gòu)建器(Query Builder)

php artisan make:migration create_mail_table
php artisan make:migration create_users_table --create=users//指定表名
php artisan make:migration add_votes_to_users_table --table=users//創(chuàng)建表
php artisan migrate//執(zhí)行
php artisan migrate:rollback//回滾
php artisan migrate:reset//回滾所有
php artisan migrate:refresh//reset then migrate
php artisan migrate:refresh --seed
//判斷表弧可、列是否存在
if (Schema::hasTable('users')) {
    //
}

if (Schema::hasColumn('users', 'email')) {
    //
}
//其他db連接
Schema::connection('foo')->create('users', function ($table) {
    $table->increments('id');
});
//存儲(chǔ)引擎
Schema::create('users', function ($table) {
    $table->engine = 'InnoDB';
    $table->increments('id');
});
Schema::rename($from, $to);
//創(chuàng)建列
Schema::table('users', function ($table) {
    $table->string('email');
});
//刪除表
Schema::table('users', function ($table) {
    $table->dropColumn('votes');
});
  • 運(yùn)行原生SQL查詢
use DB;
......
......
DB::select('select * from users where id = :id', ['id' => 1]);
DB::select('select * from users where active = ?', [1]);
DB::insert('insert into users (id, name) values (?, ?)', [1, 'Dayle']);
DB::update('update users set votes = 100 where name = ?', ['John']);
DB::delete('delete from users');
DB::statement('drop table users');
DB::table('users')->skip(10)->take(5)->get();
//事務(wù)
DB::beginTransaction();
DB::commit();
DB::rollBack();
//多個(gè)數(shù)據(jù)庫連接
DB::connection('foo')->select(...);

1.2 Eloquent

  • 創(chuàng)建模型 表(users)復(fù)數(shù),模型(User)單數(shù)
php artisan make:model User
php artisan make:model Mail -m(生成mgration筷厘,用于表還沒建立的情況)

laravel Models 文件夾驼修、laravel model 指定路徑
1、

  • 目錄結(jié)構(gòu)
    • app
      • Console
      • Events
      • ...
      • ** Models **

2命咐、composer.json

"psr-4": {
           "App\\": "app/",
           "App\\Models\\": "app/Models"
       }

composer install
3篡九、php artisan make:model Models/Task
生成的model在app\Models\,namespace App\Models;

  • 主鍵默認(rèn)id醋奠,指定主鍵用$primaryKey屬性覆蓋
protected $primaryKey = 'st_id';
  • 默認(rèn)期望有create_at榛臼、updated_at,不需要就
public $timestamps = false;
  • 自定義日期格式
  protected $dateFormat = 'U';
  • 一般查詢
$tasks = Task::where('name', 1)
               ->orderBy('id', 'desc')
               ->take(10)
               ->get();
  • 組塊結(jié)果集
Task::chunk(200, function ($tasks) {
    foreach ($tasks as $task) {
        //
    }
});
  • Not found 異常
$task=Task::where('id',$request->id)->firstOrFail();//對(duì)應(yīng)first()
$task=Task::findOrFail($id);//對(duì)應(yīng)find()
  • 聚合方法
$count = Task::where('active', 1)->count();
$max = ask::where('active', 1)->max('price');
  • 創(chuàng)建新數(shù)據(jù)
         $task=new Task;
         $task->name='ok';
         $task->save();

返回創(chuàng)建的對(duì)象

$task = Task::create(['name' => 'jin']);//前提在model里 protected $fillable = ['name'];
  • firstOrCreatefirstOrNew
    先嘗試通過給定列/值對(duì)在數(shù)據(jù)庫中查找記錄窜司,如果沒有找到的話則通過給定屬性創(chuàng)建一個(gè)新的記錄沛善。后者需要save顯示保存
 Task::firstOrCreate(['id'=>52,'name'=>'jin']);
 Task::firstOrNew(['id'=>53,'name'=>'jin'])->save(s);
  • 作用域 查詢的通用集合,用于代碼復(fù)用
//model里
public function scopeBigId($query,$id)
{
        return $query->where('id', '>', $id);
}
//調(diào)用
$a=Task::bigId(20)->orderBy('name')->get();
  • 模型事件
  • 關(guān)聯(lián)關(guān)系
    • 一對(duì)一
    /**
     * 父模型-User
     * 第二個(gè)參數(shù)為重寫【子模型】指定外鍵(默認(rèn)為user_id)
     * 【父模型】主鍵不是id塞祈,則通過第三個(gè)參數(shù)重寫
     */
      public function mail()
      {
          return $this->hasOne('App\Mail', 'foreign_key', 'local_key');
      }
    
     /**
     * 子模型-Mail
     * 第二個(gè)參數(shù)為重寫【子模型】指定外鍵(默認(rèn)為user_id)
     * 【父模型】主鍵不是id金刁,則用第三個(gè)參數(shù)指定
     */
      public function user()
      {
          return $this->belongsTo('App\User', 'foreign_key', 'other_key');
      }
    
    • 一對(duì)多類似
    • 多對(duì)多

      user,role,role_user為相關(guān)表,中間表按照關(guān)聯(lián)模型名的字母順序命名(r在u前面),且包含user_id和role_id。如果想要指定關(guān)聯(lián)表和兩個(gè)外鍵:

return $this->belongsToMany('App\Role', 'user_roles', 'user_id', 'role_id');


  ```
class User extends Model{
  /**
   * 用戶角色
   */
  public function roles()
  {
      return $this->belongsToMany('App\Role');
  }
议薪。尤蛮。。
}
class Role extends Model{
  /**
   * 角色用戶
   */
  public function users()
  {
      return $this->belongsToMany('App\User');
  }
}
  ```
>訪問中間表屬性`pivot`

    ```
$user = App\User::find(1);
foreach ($user->roles as $role) {
  echo $role->pivot->created_at;
}
  ```
- 訪問器 修改器
> 訪問器會(huì)修改訪問的屬性值($task->name),但不會(huì)修改attribute斯议,修改器會(huì)
public function getNameAttribute($value)
{
    return '經(jīng)過訪問器:' . $value;
}
public function setIdAttribute($value)
{
    $this->attributes['id'].=$value;
}
----

## Middleware
-  ### 1.1新建
`php artisan make:middleware OldMiddleware`

請(qǐng)求之前 

<?php
namespace App\Http\Middleware;
use Closure;
class BeforeMiddleware
{
public function handle($request, Closure $next)
{
// 執(zhí)行動(dòng)作

    return $next($request);
}

}

 請(qǐng)求之后

<?php
namespace App\Http\Middleware;
use Closure;
class AfterMiddleware
{
public function handle($request, Closure $next)
{
$response = $next($request);

    // 執(zhí)行動(dòng)作

    return $response;
}

}

注冊(cè)

// 在 App\Http\Kernel 里中
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,];

Route::get('admin/profile', ['middleware' => 'auth', function () {
//
}]);

驗(yàn)證認(rèn)證用戶是否擁有指定的角色产捞,可以創(chuàng)建一個(gè)RoleMiddleware
來接收角色名作為額外參數(shù)
public function handle($request, Closure $next, $role)
{
    if (! $request->user()->hasRole($role)) {
        // Redirect...
    }

    return $next($request);
}

Route::put('post/{id}', ['middleware' => 'role:editor', function ($id) {
//
}]);

在控制器中使用
public function __construct()
{
    $this->middleware('auth');

    $this->middleware('log', ['only' => ['fooAction', 'barAction']]);

    $this->middleware('subscribed', ['except' => ['fooAction', 'barAction']]);
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市哼御,隨后出現(xiàn)的幾起案子坯临,更是在濱河造成了極大的恐慌焊唬,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件看靠,死亡現(xiàn)場(chǎng)離奇詭異求晶,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)衷笋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來矩屁,“玉大人辟宗,你說我怎么就攤上這事×唢酰” “怎么了泊脐?”我有些...
    開封第一講書人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長烁峭。 經(jīng)常有香客問我容客,道長,這世上最難降的妖魔是什么约郁? 我笑而不...
    開封第一講書人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任缩挑,我火速辦了婚禮,結(jié)果婚禮上鬓梅,老公的妹妹穿的比我還像新娘供置。我一直安慰自己,他們只是感情好绽快,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開白布芥丧。 她就那樣靜靜地躺著,像睡著了一般坊罢。 火紅的嫁衣襯著肌膚如雪续担。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,475評(píng)論 1 312
  • 那天活孩,我揣著相機(jī)與錄音物遇,去河邊找鬼。 笑死诱鞠,一個(gè)胖子當(dāng)著我的面吹牛挎挖,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播航夺,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼蕉朵,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了阳掐?” 一聲冷哼從身側(cè)響起始衅,我...
    開封第一講書人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤冷蚂,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后汛闸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蝙茶,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年诸老,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了隆夯。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡别伏,死狀恐怖蹄衷,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情厘肮,我是刑警寧澤愧口,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站类茂,受9級(jí)特大地震影響耍属,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜巩检,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一厚骗、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧碴巾,春花似錦溯捆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至煮仇,卻和暖如春劳跃,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背浙垫。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來泰國打工刨仑, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人夹姥。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓杉武,卻偏偏與公主長得像,于是被迫代替她去往敵國和親辙售。 傳聞我的和親對(duì)象是個(gè)殘疾皇子轻抱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)旦部,斷路器祈搜,智...
    卡卡羅2017閱讀 134,711評(píng)論 18 139
  • 你說在你眼中那些日子別人用來耗費(fèi)你用來盡興较店。 杉本屋里散發(fā)的濃濃霧氣是你早晨習(xí)慣吮吸的第一口味道,你喜歡在霧中前行...
    杉本少女閱讀 164評(píng)論 0 0
  • 近年來離婚率逐年攀升,這種趨勢(shì)正逐漸從大城市向小城市蔓延蘸秘,從小城市向農(nóng)村蔓延官卡。那么,到底是什么原因?qū)е碌碾x婚率逐年...
    夜雨輕塵閱讀 825評(píng)論 0 0