Laravel多个whereHas关系条件

uubf1zoe  于 2023-10-22  发布在  其他
关注(0)|答案(3)|浏览(111)

我有两个表-接触和访问:
Contacts表

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

使用雄辩,我想检索所有联系人都有一个路径名= '注册'和一个发送者= '谷歌'。
目前我得到的是:

Contact::whereHas('visits', function($query) {
    $query->where('pathname','=','signup');
})
->orWhereHas('visits', function($query) {
    $query->where('referrer','=','google');
})
->get();

它正确检索访问过定价或注册页面的所有联系人。
然而,这个例子也将检索Sally(从上面的例子表中),因为她访问了signup,但没有被google引用。我需要一种方法来只检索,谁是由谷歌和访问价格都提到。
有什么想法吗?提前感谢!

xqkwcwgp

xqkwcwgp1#

您可以用途:

Contact::whereHas('visits', function($query) {
    $query->where('pathname','=','signup');
})
->whereHas('visits', function($query) {
    $query->where('referrer','=','google');
})
->get();
ulmd4ohb

ulmd4ohb2#

上面代码的改进版本:

Contact::whereHas('visits', function($query) {
    $query->where('pathname','signup')->where('referrer','google');
})->get();

几点值得注意:
1.您可以在闭包中链接where()子句。

  1. where子句的默认运算符是=,因此可以省略它。
    1.当访问多个相关模型时,使用多个whereHas()子句。
ivqmmu1c

ivqmmu1c3#

你在哪里加入了我们,你在哪里。10个月10个月10他说:

$total_number_of_conditions = 2; // общее количество условий where
    Contact::whereExists(function (Builder $b) use ($total_number_of_conditions) {
        $b->selectRaw('COUNT(*) as count')
            ->from('visits')
            ->whereColumn('сontacts.id', 'сontact_id')
            ->where('pathname', 'signup')->orWhere('referrer', 'google'))
            ->having('count', $total_number_of_conditions);
    })->get();

или

$total_number_of_conditions = 2; // общее количество условий where
Contact::whereHas('visits', function (Builder $b) use ($total_number_of_conditions) {
    $b->selectRaw('COUNT(*) as count')
        ->where('pathname', 'signup')->orWhere('referrer', 'google'))
        ->having('count', $total_number_of_conditions);
        })->get();

相关问题