来自单个控制器的多个模型[关闭]
Posted
技术标签:
【中文标题】来自单个控制器的多个模型[关闭]【英文标题】:Multiple Models from Single Controller [closed] 【发布时间】:2020-05-27 01:50:24 【问题描述】:我是 laravel 的新手,总的来说有点生疏,所以请耐心等待。我想知道最好的方法是什么。
我有几个表和几个 mysql 视图。每个表或视图都有自己的模型(对吗?)。
表: 用户、部门、网站、用户时间
查看次数: FullUser(加入 User、Department 和 Site)、UserTime(加入 >User、UserTime)、UserDateOnly(加入 User、UserTime 并按日期/用户分组)
对于每个主管(在用户中标记),我需要列出所有主管员工(链接到用户),并为每个员工列出按日期分组的所有时间。所以基本上结果将是一个员工列表,每个日期都有一个日期列表,每个日期都有一个多次列表。
首先,我应该将此方法添加到 用户控制器 还是为此创建一个单独的控制器,因为它将查询多个模型?
其次,我的流程计划是:
-
从 FullUser 获取主管的所有相关员工列表。
遍历结果并查询每个结果的 UserDateOnly 视图以获取该用户的所有日期。
遍历结果并查询每个日期的 UserTime 视图,以获取该用户在该日期的所有时间。
将结果添加到此布局中的集合以传递给视图:
员工[]
----Employee->empoyee_details
--------日期[]
------------时间->时间
这看起来是否合理,我是否应该在一种控制方法中完成所有这些操作。如果不从视图中进行查询,我想不出另一种方法。
谢谢。
【问题讨论】:
【参考方案1】:Controller 只是拥有更好的干净代码的文件,但它们并没有真正分配给模型,您可以拥有 UserController 但将任何您想要的东西放在那里并从那里获取您想要的任何模型:
class UserController
public function getPhotos(Request $request, Photo $photo)
return $photo;
您的问题更多是关于数据库查询,这可以通过模型(Eloquent)来完成,例如,如果您想获得类型主管的用户,假设您将其作为表中的一列
User::where('is_supervisor', 1)->get() // Get all;
User::where('is_supervisor', 1)->first() // get the first result row in db
现在,如果您想让它变得更复杂并想进入Eloquent Relations,那么这是您需要阅读的全新主题。
例如,您可以为用户分配部门,反之亦然
准备好迁移(数据库表)
对于用户迁移文件
这里需要添加一个名为department_id
的列,如果用户属于单个部门。
// appending to users migrations
....
$schema->unsignedBigInteger('department_id')->nullable();
....
然后在Users.php
模型中你需要添加这个
....
public function department()
return $this->belongsTo('App\Department'); // or $this->belongsTo(Deparment::class); if you want to put use `App\Deparments` in the head of your php model file
然后你可以像这样在控制器中从用户对象中获取部门对象:
$User = User::first()->department;
上面的代码将尝试根据所选用户的department_id
中的值从数据库中的部门表中选择部门行,因此,如果您的用户 ID 为 1,部门 ID 为 2,并且您告诉 Laravel要获取 id 为 1 的用户对象,然后访问 ->department
关系,它将根据指定的 id 获取该对象,并为此返回 id 为 2 的 deparment 对象,这样您就可以访问数据该部门对象的名称,就像你可以做的那样:User::first()->department->title
这将为你提供部门的标题列。
这是一个很长的话题,有很多可能性,我建议你阅读Laravel Relations。
你最好的朋友在这里并且永远是
dd
的助手,每当你怀疑你的代码的输出时,只要dd()
就像这样,如果你想看看这个User::first()->department
有什么你可以dd(User::first()->department);
如有疑问,请查看数据。
【讨论】:
谢谢。我想我会通读 laravel 关系,看看我能做到什么。以上是关于来自单个控制器的多个模型[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
- 更新 - Rails API 应用程序使用来自控制器的 POST 请求一次创建不同模型的多个嵌套记录