基于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 **
- app
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'];
-
firstOrCreate
和firstOrNew
先嘗試通過給定列/值對(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']]);
}