Laravel反向搜索记录

时间:2014-11-28 09:20:07

标签: php laravel eloquent

我很难尝试解决问题。

我有两张桌子。一个用于公司,另一个用于每个公司提供的服务。每个服务都有一个外键' 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.

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

我需要一些帮助。感谢。

2 个答案:

答案 0 :(得分:1)

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

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

Docs Eloquent Querying Relations

<强>更新

你的答案是对的。我读错了你的问题。如果您想查找服务符合您标准的公司,可以使用whereHas方法。

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

答案 1 :(得分:1)

我自己回答。

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

感谢,无论如何都要回复。