use*_*951 5 relationship laravel eloquent
我有两张桌子 - 联系和访问:
联系表
id | name
----- | -------
1 | Joe
2 | Sally
Run Code Online (Sandbox Code Playgroud)
访问表
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
Run Code Online (Sandbox Code Playgroud)
使用eloquent,我想检索所有具有路径名 ='注册'和引用者 ='谷歌'的联系人.
到目前为止我得到的是:
Contact::whereHas('visits', function($query) {
$query->where('pathname','=','signup');
})
->orWhereHas('visits', function($query) {
$query->where('referrer','=','google');
})
->get();
Run Code Online (Sandbox Code Playgroud)
正确检索已访问定价或注册页面的所有联系人.
但是,这个例子也会检索Sally(来自上面的示例表),因为她访问了注册,但没有被谷歌引用.我需要一种方法来只检索Joe,他既是谷歌和访问定价.
有任何想法吗?提前致谢!
Mar*_*łek 12
您可以使用:
Contact::whereHas('visits', function($query) {
$query->where('pathname','=','signup');
})
->whereHas('visits', function($query) {
$query->where('referrer','=','google');
})
->get();
Run Code Online (Sandbox Code Playgroud)
上面代码的精炼版:
Contact::whereHas('visits', function($query) {
$query->where('pathname','signup')->where('referrer','google');
})->get();
Run Code Online (Sandbox Code Playgroud)
需要注意的几点:
where()
在闭包内链接子句。=
,因此您可以忽略它。whereHas()
访问多个相关模型时,请使用多个子句。 归档时间: |
|
查看次数: |
9295 次 |
最近记录: |