我有两张桌子 - 联系人和访问:
联系人表
id | name
----- | -------
1 | Joe
2 | Sally
访问表
id | contact_id | pathname | referrer
----- | ------- | ------- | -------
1 | 1 | about | google
2 | 1 | pricing | null
3 | 1 | signup | null
4 | 2 | about | null
5 | 2 | signup | null
使用eloquent,我想检索所有路径名 ='注册'和推荐人 =' google'。
到目前为止,我得到的是:
Contact::whereHas('visits', function($query) {
$query->where('pathname','=','signup');
})
->orWhereHas('visits', function($query) {
$query->where('referrer','=','google');
})
->get();
正确检索已访问定价或注册页面的所有联系人。
但是,此示例还会检索 Sally (来自上面的示例表),因为她访问了注册,但未被谷歌推荐。我需要一种方法来只检索 Joe ,这两者都是谷歌和访问定价。
有什么想法吗?提前谢谢!
答案 0 :(得分:9)
您可以使用:
Contact::whereHas('visits', function($query) {
$query->where('pathname','=','signup');
})
->whereHas('visits', function($query) {
$query->where('referrer','=','google');
})
->get();
答案 1 :(得分:4)
以上代码的精炼版本:
Contact::whereHas('visits', function($query) {
$query->where('pathname','signup')->where('referrer','google');
})->get();
几个值得注意的要点:
where()
子句。=
,因此您可以省略它。whereHas()
子句。