Laravel Model 知识点
保护属性
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]);
belongsTo关联
$account = App\Account::find(10);
$user->account()->associate($account);
$user->save();
当更新 belongsTo 关联时,可以使用 associate 方法。此方法将会在子模型中设置外键:
它相当于
$account->user_id = $user->id;
(仅在一对多的场景下使用)
本地作用域
<?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
前缀。
作用域总是返回查询构建器
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: