Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/236.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Schema.org+;太复杂了?_Php_Laravel_Orm_Schema - Fatal编程技术网

Php Schema.org+;太复杂了?

Php Schema.org+;太复杂了?,php,laravel,orm,schema,Php,Laravel,Orm,Schema,我最近完成了我的第一个Laravel项目(我真的很喜欢框架的外观,并想尝试一下),我在思考我认为我做得好的地方,我做得差的地方,以及下次我想做什么不同的地方 我注意到的最大问题之一是,为了避免数据重复,为了从数据库中提取有意义的信息,我需要做一些非常可怕的工作 在项目开始时,我将其作为设计模型的粗略基础。例如,当我想存储Employees和Customers时: 创建一个人模型 一个人有许多角色 客户是一个(变形)角色 员工是一个(变形)角色 一个组织有许多员工 一个组织有许多客户 一开始这

我最近完成了我的第一个Laravel项目(我真的很喜欢框架的外观,并想尝试一下),我在思考我认为我做得好的地方,我做得差的地方,以及下次我想做什么不同的地方

我注意到的最大问题之一是,为了避免数据重复,为了从数据库中提取有意义的信息,我需要做一些非常可怕的工作

在项目开始时,我将其作为设计模型的粗略基础。例如,当我想存储
Employee
s和
Customer
s时:

  • 创建一个
    模型
  • 一个
    有许多
    角色
  • 客户
    是一个(变形)
    角色
  • 员工
    是一个(变形)
    角色
  • 一个
    组织
    有许多
    员工
  • 一个
    组织
    有许多
    客户
一开始这看起来不错,因为一个人既可以是雇员,也可以是顾客(你可以在沃尔玛购物,也可以为沃尔玛工作)。此外,由于一个人可以扮演多个角色,他们可以是多个客户和多个员工——如果他们在多个商店购物,或者如果他们有两份工作

然而,当我想做“查找X组织中名为John的所有员工”之类的事情时,我遇到了一些问题:

这似乎非常复杂(更不用说效率低下),特别是考虑到如果我没有发明混乱的模式,它只会是一行:

$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_类型(外键指向的实体)
在拉威尔,这是

作为额外费用

我确实实现了Joseph Silber的回答

请查看下面readme.md中的实体关系图 具有字段的实体角色

  • Rolable_id(外键点所在的id)
  • Rolable_类型(外键指向的实体)
在拉威尔,这是

作为额外费用

我确实实现了Joseph Silber的回答

请查看下面readme.md中的实体关系图 具有字段的实体角色

  • Rolable_id(外键点所在的id)
  • Rolable_类型(外键指向的实体)
在拉威尔,这是

作为额外费用

我确实实现了Joseph Silber的回答

请查看下面readme.md中的实体关系图 具有字段的实体角色

  • Rolable_id(外键点所在的id)
  • Rolable_类型(外键指向的实体)
在拉威尔,这是

$employees = $organization->employees()->where('name', 'John')->get();