保護屬性
fillable
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Flight extends Model
{
/**
* 可以被批量賦值的屬性。
*
* @var array
*/
protected $fillable = ['name'];
}
白名單,在變數 $fillable 中的欄位可以批量賦值
隱藏屬性
hidden
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Flight extends Model
{
/**
* 可以被批量賦值的屬性。
*
* @var array
*/
protected $hidden = ['name'];
}
當我們需要對使用者密碼或其它敏感資訊在使用者例項通過陣列或 JSON 顯示時進行隱藏,則可使用 hidden 屬性
通俗的來講就是
資料庫查詢成功後,返回資料時,會自動過濾 $hidden 中的欄位,以免暴露敏感資訊
日期轉換器
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
/**
* 應該轉換為日期格式的屬性.
*
* @var array
*/
protected $dates = [
'seen_at',
];
}
上面的例子就是設定欄位 seen_at 屬性為日期
$user->seen_at
返回的就是一個時間日期物件(Carbon
物件)
ORM
附加(多對多關聯)
$user = App\User::find(1);
1.$user->roles()->attach($roleId);
2.$user->roles()->attach($roleId, ['expires' => $expires]);
3.$user->roles()->attach([
1 => ['expires' => $expires],
2 => ['expires' => $expires],
]);
- 例如,我們假設一個使用者可以擁有多個角色,並且每個角色都可以被多個使用者共享。給某個使用者附加一個角色是通過向中間表插入一條記錄實現的,可以使用 attach 方法完成該操作
2.在將關係附加到模型時,還可以傳遞一組要插入到中間表中的附加資料 - attach 允許傳遞一個陣列
分離(多對多關聯)
// 移除使用者的一個角色...
$user->roles()->detach($roleId);
// 移除使用者的所有角色...
$user->roles()->detach();
//deteach 允許傳遞一個陣列
$user->roles()->detach([1, 2, 3]);
本地作用域
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
/**
* 只查詢受歡迎的使用者的作用域
*
* @param \Illuminate\Database\Eloquent\Builder $query
* @return \Illuminate\Database\Eloquent\Builder
*/
public function scopePopular($query)
{
return $query->where('votes', '>', 100);
}
/**
* 只查詢 active 使用者的作用域
*
* @param \Illuminate\Database\Eloquent\Builder $query
* @return \Illuminate\Database\Eloquent\Builder
*/
public function scopeActive($query)
{
return $query->where('active', 1);
}
}
使用本地作用域
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
/**
* 只查詢受歡迎的使用者的作用域
*
* @param \Illuminate\Database\Eloquent\Builder $query
* @return \Illuminate\Database\Eloquent\Builder
*/
public function scopePopular($query)
{
return $query->where('votes', '>', 100);
}
/**
* 只查詢 active 使用者的作用域
*
* @param \Illuminate\Database\Eloquent\Builder $query
* @return \Illuminate\Database\Eloquent\Builder
*/
public function scopeActive($query)
{
return $query->where('active', 1);
}
}
本地作用域允許定義通用的約束集合以便在應用程式中重複使用。例如,你可能經常需要獲取所有「流行」的使用者。要定義這樣一個範圍,只需要在對應的 Eloquent 模型方法前新增 scope
字首。
作用域總是返回查詢構建器