拉拉维尔反向搜索记录


Laravel reverse search of records

我很难找到解决问题的方法。

我有两张桌子。一个用于公司,另一个用于每个公司提供的服务。每个服务都有一个外键"id_company",将他引用到提供商公司。所以我的模型是这样的。

TABLE COMPANIES.
id_company        INTEGER,
NAME              VARCHAR,
blah, blah
TABLE SERVICES.
id_service        INTEGER,
id_company        INTEGER,
type_of_service   INTEGER,
name              VARCHAR,
blah, blah.

我的雄辩模型是这样的。

class company {
   public function services() {
      return $this->hasMany('Service', 'id_service');
   }
}
class service {
   public function company() {
      return $this->belongsTo('Company');
   }
}

我需要列出所有提供服务的公司。SQL应该看起来像

SELECT id_company FROM companies as c
                  JOIN services as s ON s.id_company = c.id_company
                  WHERE s.type_of_service = a_number.

我知道雄辩的基础,但我无法弄清楚如何做到这一点。

这将为您提供提供 1 项或多项服务的所有公司。(任何提供服务的公司)

$companies = Company::has('services')->get();

文档雄辩查询关系

更新

你的答案是正确的。我看错了你的问题。如果要查找具有符合您条件的服务的公司,可以使用whereHas方法。

$companies = Company::whereHas('services', function ($q) use ($a_number)
{
    $q->where('type_of_service', $a_number);
})->get();

我回答自己。

$companies = Company::whereHas('services', function($q) {
   $q->where('id_service', a_number);
})->get()

谢谢,无论如何你的回应。