Php Schema.org+;太复杂了?
我最近完成了我的第一个Laravel项目(我真的很喜欢框架的外观,并想尝试一下),我在思考我认为我做得好的地方,我做得差的地方,以及下次我想做什么不同的地方 我注意到的最大问题之一是,为了避免数据重复,为了从数据库中提取有意义的信息,我需要做一些非常可怕的工作 在项目开始时,我将其作为设计模型的粗略基础。例如,当我想存储Php Schema.org+;太复杂了?,php,laravel,orm,schema,Php,Laravel,Orm,Schema,我最近完成了我的第一个Laravel项目(我真的很喜欢框架的外观,并想尝试一下),我在思考我认为我做得好的地方,我做得差的地方,以及下次我想做什么不同的地方 我注意到的最大问题之一是,为了避免数据重复,为了从数据库中提取有意义的信息,我需要做一些非常可怕的工作 在项目开始时,我将其作为设计模型的粗略基础。例如,当我想存储Employees和Customers时: 创建一个人模型 一个人有许多角色 客户是一个(变形)角色 员工是一个(变形)角色 一个组织有许多员工 一个组织有许多客户 一开始这
Employee
s和Customer
s时:
- 创建一个
模型人
- 一个
有许多人
角色
是一个(变形)客户
角色
是一个(变形)员工
角色
- 一个
有许多组织
员工
- 一个
有许多组织
客户
$employees = $organization->employees()->where('name', 'John')->get();
那么我只是做错了什么?Laravel有没有一种简单的方法来处理像这样复杂的关系,或者说是一个简单的方法来解决永远不要让你的关系变得如此复杂的问题?在你的模型上添加一些东西真的会有帮助:
类角色扩展模型
{
公共函数scopeNamed($query,$name)
{
$query->whereHas('person',function($query)use($name){
$query->where('name',$name);
});
}
}
类雇员扩展模型
{
公共函数scopeNamed($query,$name)
{
$query->whereHas('role',function($query)use($name){
$query->named($name);
});
}
}
然后你可以这样做:
$employees=$organization->employees()->named('John')->get();
更好。在您的模型上添加内容确实有帮助:
类角色扩展模型
{
公共函数scopeNamed($query,$name)
{
$query->whereHas('person',function($query)use($name){
$query->where('name',$name);
});
}
}
类雇员扩展模型
{
公共函数scopeNamed($query,$name)
{
$query->whereHas('role',function($query)use($name){
$query->named($name);
});
}
}
然后你可以这样做:
$employees=$organization->employees()->named('John')->get();
更好。在您的模型上添加内容确实有帮助:
类角色扩展模型
{
公共函数scopeNamed($query,$name)
{
$query->whereHas('person',function($query)use($name){
$query->where('name',$name);
});
}
}
类雇员扩展模型
{
公共函数scopeNamed($query,$name)
{
$query->whereHas('role',function($query)use($name){
$query->named($name);
});
}
}
然后你可以这样做:
$employees=$organization->employees()->named('John')->get();
更好。在您的模型上添加内容确实有帮助:
类角色扩展模型
{
公共函数scopeNamed($query,$name)
{
$query->whereHas('person',function($query)use($name){
$query->where('name',$name);
});
}
}
类雇员扩展模型
{
公共函数scopeNamed($query,$name)
{
$query->whereHas('role',function($query)use($name){
$query->named($name);
});
}
}
然后你可以这样做:
$employees=$organization->employees()->named('John')->get();
好多了。作为额外的
我确实实现了Joseph Silber的回答
请查看下面readme.md中的实体关系图
具有字段的实体角色
- Rolable_id(外键点所在的id)
- Rolable_类型(外键指向的实体)
- Rolable_id(外键点所在的id)
- Rolable_类型(外键指向的实体)
- Rolable_id(外键点所在的id)
- Rolable_类型(外键指向的实体)
- Rolable_id(外键点所在的id)
- Rolable_类型(外键指向的实体)
$employees = $organization->employees()->where('name', 'John')->get();