eloquent - 如何在 Laravel 8 中获取扩展类的第一个对象
问题描述
我有一个类 Person,它在数据库中的表称为 people。我将 Person 类扩展为两个不同的类:Client 和 Employee。两者在程序中执行的动作不同,但基本上都是由一列 persontype_id 的值定义的(当然还有一个模型 PersonType)。
我可以做这样的事情:
$clients = Client::where( 'persontype_id', 1 )->get(); // because PersonType = 1 means clients
但是有没有办法为整个模型确定范围,所以我可以做这样的事情:
$client = Client::all(); // and I get only clients without Employees?
类似于 SoftDeletes 特征的东西,在执行查询时会忽略已删除的对象
解决方案
好的,我找到了 Caleb Porzio 的一篇文章https://tighten.co/blog/extending-models-in-eloquent/,他展示了如何使用静态列类型进行操作。他甚至有一个包裹。我的解决方案将关系添加到全局范围(personTypes),方法如下所示:
public static function boot()
{
parent::boot();
static::addGlobalScope(function ($query) {
$query->whereHas('personTypes', function ($query) {
return $query->where('slug', 'client' );
});
});
}
推荐阅读
- java - 扩展 Eclipse 通用文本编辑器
- java - 使用分页和多个过滤器为数据库查询构建 GET Rest API
- autocad-plugin - 在 AutoLISP 的特定索引中更改 DXF 实体
- rest - HBASE REST API PUT 调用未更新记录
- python - 类 datetime.time 不能转换为 pandas 中的日期时间
- c# - JSON.Net 将单对象数组序列化为对象
- java - 如何在列表视图中添加开关以及如何在新活动中打开和关闭状态
- mysql - 自动生成的sql脚本,不能配置ID参数
- python - 树莓派 3 opencv python 和 pyinstaller
- android - 根据 Firebase 中的优先级对数据进行排序并将其显示在 FirebaseRecyclerAdapter 中