首页 > 解决方案 > hasManyThrough() 仅使用第一个“通过”关系

问题描述

我目前正在努力使用 hasManyThrough() 函数。基本上,我正在尝试加载 n 到 n 关系,但我只想包含第一个“通过”关系。这是一个例子:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Project extends Model
{
    /**
     * Get all of the deployments for the project.
     */
    public function deployments()
    {
        return $this->hasManyThrough(Deployment::class, Environment::class);
    }
project:
   id: 1
   name: Project1

environment:
   id: 1
   project_id: 1
   name: environment1

   id: 2
   project_id: 1
   name: environment2

deployment:
   id: 1
   environment_id: 1
   commit_hash: xxxx1

   id: 2
   environment_id: 1
   commit_hash: xxx11

   id: 3
   environment_id: 2
   commit_hash: xxxx2

这里的deployments()函数显然返回所有deployments特定environmentsproject. 我如何才能只获取deploymentsenvironments条目的第一个(或最后一个)projects条目?在这种情况下,这将是environmentwith id: 1and 部署 with id: 1and id: 2,例如。

标签: laraveleloquentrelationshipeager-loading

解决方案


我认为您可能希望像这样指定 hasOne 关系:

// Project.php
public function environment()
{
    return $this->hasOne(Environment::class);
}

然后您可以使用以下命令预先加载部署:

Project::with(['environment.deployments'])

我认为您无法developments()在 Project 上建立关系功能,但有人可能会证明我错了。


推荐阅读