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],
]);
  1. 例如,我们假设一个用户可以拥有多个角色,并且每个角色都可以被多个用户共享。给某个用户附加一个角色是通过向中间表插入一条记录实现的,可以使用 attach 方法完成该操作
    2.在将关系附加到模型时,还可以传递一组要插入到中间表中的附加数据
  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 协议》,转载必须注明作者和本文链接
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!