来自单个控制器的多个模型[关闭]

Posted

技术标签:

【中文标题】来自单个控制器的多个模型[关闭]【英文标题】:Multiple Models from Single Controller [closed] 【发布时间】:2020-05-27 01:50:24 【问题描述】:

我是 laravel 的新手,总的来说有点生疏,所以请耐心等待。我想知道最好的方法是什么。

我有几个表和几个 mysql 视图。每个表或视图都有自己的模型(对吗?)。

表: 用户部门网站用户时间

查看次数: FullUser(加入 UserDepartmentSite)、UserTime(加入 >UserUserTime)、UserDateOnly(加入 UserUserTime 并按日期/用户分组)

对于每个主管(在用户中标记),我需要列出所有主管员工(链接到用户),并为每个员工列出按日期分组的所有时间。所以基本上结果将是一个员工列表,每个日期都有一个日期列表,每个日期都有一个多次列表。

首先,我应该将此方法添加到 用户控制器 还是为此创建一个单独的控制器,因为它将查询多个模型?

其次,我的流程计划是:

    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 请求一次创建不同模型的多个嵌套记录

如何从单个控制器将数据插入到 laravel 中的多个表中?

如何设置选择器视图以显示来自多个矩阵选项的数据?

试图在一个视图中列出来自多个模型的信息

Ember.JS - 如何在同一页面中使用多个模型、控制器和视图?