wherehasin的方法解读
时间: 2024-03-10 19:46:07 浏览: 22
`wherehasin` 方法是一个用于 Laravel Eloquent 查询构建器的方法。它的作用是基于一个关联模型的某个字段值,查询主模型中符合条件的记录。
该方法接收三个参数:第一个参数是关联关系的名称;第二个参数是关联模型的字段名;第三个参数是一个数组,包含了需要匹配的值。
例如,如果我们有一个 `User` 模型和一个 `Post` 模型,它们之间的关系是一对多,那么我们可以使用 `wherehasin` 方法查找所有用户中,拥有发帖数量在指定范围内的用户。示例代码如下:
```php
$users = User::whereHasIn('posts', 'category_id', [1, 2, 3])->get();
```
这个方法的实现原理是通过生成一个子查询,来查询符合条件的关联模型的主键值,然后再通过 `whereIn` 方法来查询主模型中主键值匹配上述子查询结果的记录。
相关问题
实现一下wherehasin
实现`wherehasin`方法可以参考dcat/laravel-wherehasin的实现方式,具体代码如下:
```php
public function whereHasIn($relation, $column, $values, $boolean = 'and', $not = false)
{
$this->query->whereHas($relation, function ($query) use ($column, $values, $not) {
$query->whereIn($column, $values, 'and', $not);
}, $boolean);
return $this->query;
}
public function orWhereHasIn($relation, $column, $values)
{
return $this->whereHasIn($relation, $column, $values, 'or');
}
public function whereHasNotIn($relation, $column, $values, $boolean = 'and')
{
return $this->whereHasIn($relation, $column, $values, $boolean, true);
}
public function orWhereHasNotIn($relation, $column, $values)
{
return $this->whereHasIn($relation, $column, $values, 'or', true);
}
```
`whereHasIn`方法接收四个参数,分别是关系名称、列名、值数组以及连接类型和是否取反的标识,其中关系名称和值数组是必填的,列名默认为主键列,连接类型和是否取反的标识默认为`and`和`false`。
`orWhereHasIn`方法是`whereHasIn`方法的`or`版本,用于添加一个关系查询的OR IN条件。
`whereHasNotIn`方法是`whereHasIn`方法的NOT IN版本,用于添加一个关系查询的NOT IN条件。
`orWhereHasNotIn`方法是`whereHasNotIn`方法的`or`版本,用于添加一个关系查询的OR NOT IN条件。
实现一下dcat/laravel-wherehasin的每个方法
dcat/laravel-wherehasin提供了以下几个方法:
1. `whereIn($relation, $values, $boolean = 'and', $not = false)`: 添加一个关系查询的IN条件。
```php
public function whereIn($relation, $values, $boolean = 'and', $not = false)
{
$this->query->whereHas($relation, function ($query) use ($values, $not) {
$query->whereIn($this->getRelationKey(), $values, 'and', $not);
}, $boolean);
return $this->query;
}
```
2. `whereNotIn($relation, $values, $boolean = 'and')`: 添加一个关系查询的NOT IN条件。
```php
public function whereNotIn($relation, $values, $boolean = 'and')
{
return $this->whereIn($relation, $values, $boolean, true);
}
```
3. `orWhereIn($relation, $values)`: 添加一个关系查询的OR IN条件。
```php
public function orWhereIn($relation, $values)
{
return $this->whereIn($relation, $values, 'or');
}
```
4. `orWhereNotIn($relation, $values)`: 添加一个关系查询的OR NOT IN条件。
```php
public function orWhereNotIn($relation, $values)
{
return $this->whereIn($relation, $values, 'or', true);
}
```