与Eloquent

时间:2015-07-22 19:59:23

标签: php eloquent relationship

我在PHP应用程序中使用Eloquent并且在hasManyThrough关系中苦苦挣扎。

这是我的结构:

Company 
   id
   name

Admin
   id
   company_id
   name

Offer
   id
   admin_id
   name

Application
   id
   offer_id
   candidat_id

每个Admin都是Company的一部分,可以发布Offer,并且候选人可以对该优惠提出Application

我正在尝试获取已由该公司管理员启动的优惠所有应用程序。

我尝试在hasManyThrough模型中使用Company关系,如下所示:

public function applications()
{
    return $this->hasManyThrough("Application", "Offer");
}

但是我收到以下错误:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'offers.entreprise_id' in 'field list' (SQL: select `applications`.*, `offers`.`entreprise_id` from `applications` inner join `offers` on `offers`.`id` = `applications`.`offer_id` where `offers`.`entreprise_id` in (1))

这是有道理的,因为它认为Offer列在Company而不是Admin

如何设置它以便查找该公司的Admin,而无需获取公司的所有管理员然后循环遍历它们,获取每个管理员的所有应用程序?

这样可行,但当Eloquent提供这些让我们的生活更轻松的关系时,这似乎是一种乏味的做法。是否有更优雅的方式来实现我想要的目标?

1 个答案:

答案 0 :(得分:0)

在这种情况下没有本机关系。

我创建了一个HasManyThrough级的无限关系:Repository on GitHub

安装后,您可以像这样使用它:

class Company extends Model {
    use \Staudenmeir\EloquentHasManyDeep\HasRelationships;

    public function applications() {
        return $this->hasManyDeep(Application::class, [Admin::class, Offer::class]);
    }
}