我在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提供这些让我们的生活更轻松的关系时,这似乎是一种乏味的做法。是否有更优雅的方式来实现我想要的目标?
答案 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]);
}
}