Php 没有钥匙的拉威尔雄辩的关系
我如何在雄辩中加载另一个模型?这种关系不是传统意义上的关系,而是一种要求 我有一个Php 没有钥匙的拉威尔雄辩的关系,php,laravel,eloquent,relationship,Php,Laravel,Eloquent,Relationship,我如何在雄辩中加载另一个模型?这种关系不是传统意义上的关系,而是一种要求 我有一个用户表和一个目标类型表。每个用户将拥有所有相同的目标类型。因此,target\u types表中出现的target\u types将适用于所有用户。所以不需要外键类型的关系 我意识到我可以走查询生成器的路线,但理想情况下,我希望能够做到以下几点: User::with('target_types')->get(); 有什么想法吗?根据建议,您可以返回视图/API两个集合:$users和$targetTypes a
用户
表和一个目标类型
表。每个用户
将拥有所有相同的目标类型
。因此,target\u types
表中出现的target\u types
将适用于所有用户。所以不需要外键类型的关系
我意识到我可以走查询生成器的路线,但理想情况下,我希望能够做到以下几点:
User::with('target_types')->get();
有什么想法吗?根据建议,您可以返回视图/API两个集合:$users
和$targetTypes
app/Http/Controllers/SomeCoolController.php
公共功能索引(请求$Request)
{
//获取您的用户
$users=User::all();
//获得你的目标类型
$targetTypes=TargetType::all();
//将它们返回到前端
返回响应([
“数据”=>[
“用户”=>$users,
“目标类型”=>$targetTypes
]
], 200);
//或者如果你能看到的话
//返回视图('my_cool_view',['users'=>$users,'targetTypes'=>$targetTypes]);
}
可供替代的
您说所有用户的targetTypes
都是相同的。以防这种类型不经常改变。为什么不将它们存储在模型中
app/User.php
公共函数getTargetTypesAttribute()
{
返回['my','list','of','target','types'];
}
然后,您可以在查询用户时使用它:
$user=user::first();
dd($user->target\u类型);
//这将输出目标类型的列表。
您可以像这样“伪造”用户模型中的关系:
//in User model
public function targetTypes(){
return TargetType::where("deleted_at", "<>", "NULL");
}
为什么不直接返回一个单独的集合目标类型
,而不是强制一个不存在的关系呢?你能举个例子吗?此外,如果我能实现上述功能,我希望能够使用嵌套的即时加载,例如User::with('target_types.other_related_data')->get();我的意思是,放入一个不同的变量$users
将是用户的集合,$targetTypes
将是目标类型的集合。您似乎不需要这种关系。抱歉,我遗漏了一个细节,那就是我正在创建一个API(不是传递给视图),因此在查询用户时,数据需要以JSON属性的形式呈现。@Stevievie我已经更改了控制器中的返回类型,还包括了一个替代项。这就是为什么我说“您可以伪造它”,hahaSo,这是因为,该关系返回一个雄辩的集合,您可以在该集合上调用其他雄辩的查询(例如where())。模型不知道,这不是一个规则的关系。我刚刚意识到,如果TargetType模型有不同的约束,这不起作用,在我的例子中,它有。这是什么约束?
User::with('targetTypes')->get();