📜  wherehas laravel search - PHP (1)

📅  最后修改于: 2023-12-03 15:35:41.231000             🧑  作者: Mango

在 Laravel 中使用 WhereHas 进行搜索

Laravel 是一款基于 PHP 的开源 Web 应用框架,它提供了许多简单易用的功能,其中包括了 WhereHas 方法。WhereHas 方法是在关联模型上查询特定条件的数据,这对于搜索和筛选数据非常有用。本文将介绍如何在 Laravel 应用中使用 WhereHas 方法进行搜索。

WhereHas 方法的语法

WhereHas 方法可以用于 Eloquent 模型上的关系,通过定义一个闭包函数,它会返回一个定义了筛选条件的查询实例。下面是 WhereHas 方法的语法。

$builder->whereHas($relation, $callback);
  • $relation:要搜索的关联关系名称。
  • $callback:接收 Query Builder 实例作为参数的闭包函数。
实例

假设我们有两个模型,一个是用户模型(User),另一个是文章模型(Article),用户和文章之间是一对多的关系。每个用户可以有多篇文章。现在我们要搜索发布时间在过去一周内的,所有由某个用户所发布的文章。

  • User 模型
class User extends Model
{
    public function articles()
    {
        return $this->hasMany(Article::class);
    }
}
  • Article 模型
class Article extends Model
{
    public function users()
    {
        return $this->belongsTo(User::class);
    }

    public function scopePublishedLastWeek($query)
    {
        // 返回发布时间在过去一周内的文章
        return $query->where('published_at', '>=', Carbon::today()->subWeek());
    }
}

我们可以使用 WhereHas 方法来实现这个搜索:

$userId = 1; // 用户 ID
$articles = Article::whereHas('users', function ($query) use ($userId) {
    $query->where('id', $userId);
})->publishedLastWeek()->get();

上面的代码会返回用户 ID 为 1 的用户在过去一周内发布的所有文章。我们首先使用 WhereHas 方法来定义搜索的关联关系。然后,通过闭包函数,我们可以过滤用户 ID 为 1 的文章。最后,我们使用我们之前定义的 scope 查询,筛选发布时间在过去一周内的文章。

结论

WhereHas 方法可以帮助我们在 Laravel 应用中定位到特定的数据。在本文中,我们示范了如何使用 WhereHas 方法在关系模型上执行搜索操作。希望这篇文章对你有所帮助!