从无框架开发到第一次接触Laravel(使用5.1版),我对要处理的东西(迁移,种子,仇恨,变形金刚,变压器,单元测试,错误处理等)有点不知所措。 )。

我想在返回其show method部分时得到一些帮助(遵循REST概念)。我具有以下数据库结构:



php - 在Laravel中构建REST API-LMLPHP

现在,当列出特定票证(例如GET /customers/5/tickets/3)时,屏幕需要显示该票证的所有交互以及票证表中的所有信息(有点像页面标题)以及创建该特定交互的每个用户的名称。 。

考虑到关系,我应该从单个调用中返回所有这些数据,还是应该将票证表中的信息(例如,从index method调用中)保留在前端?即使我应该保留票证信息(页面标题),每次交互我仍然留下interaction join users + N个附件。有哪些解决方案?

我决定打开此线程,因为我正在尝试对该调用进行单元测试,并且无法决定是否应该为数据库播种以获取使其正常工作所需的所有信息。

编辑

为了更好地阐明我的要求,我对如何处理数据库通信没有疑问,我已经设置了扩展Eloquent类的模型,并定义了hasMany,belongsTo等数据。

namespace App\Models;

class Company extends Model {

    /**
     * Get the users from the company.
     * @return \Illuminate\Database\Eloquent\Relations\HasMany
     */
    public function users() {
        return $this->hasMany('App\Models\User');
    }
}

为了不增加职位的规模,我将只提供Company模型。希望大家都知道我的公司用户票证交互附件模型都已设置并可以使用。

编辑2

问题在于处理它的实践。 GET /customers/5/tickets/3应该返回票证记录,它的所有交互作用,每个交互的用户,每个交互的所有附件吗?难道不是对单个端点负责吗?就像我在上面提到的那样,我认为我可以从前端要求保留前端列出所有票证时的票证信息,这消除了票证记录的负担,但它仍然是TicketController,并且还有仍然有很多数据要加载。我正在寻求有关处理大量信息的建议,因为我以前从未做过,并且我希望将要做的事情减少到最少。

最佳答案

我认为您应该返回API使用者显示一张票证条目所需的所有信息。我已经在一些项目中进行了工作,这些项​​目有查询参数来告诉服务器要包含哪些相关模型,而其他项目则需要后续的AJAX调用来获取相关数据,但是我认为这是不必要的复杂操作,除非交互数据很大或非常少需要。

我建议为每个模型创建 View 局部 View ,这样您就可以灵活处理一个大 View 。

解决您提到的N + 1查询问题是微不足道的。这是eager loading的理想情况。

尝试这样的事情:$tickets = Tickets::with('interactions','user')->get()
这将在一个查询中加载所有关联的数据。

关于php - 在Laravel中构建REST API,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33391733/

10-10 10:20