php - 关系的 Eloquent 查询范围

标签 php laravel laravel-4 eloquent

我有两个模型叫做 PageUser我已经建立了 Eloquent 关系如下:

public function user() {
  return $this->belongsTo('User')
}

当我 dd(Page::with('user')->get())我得到正确的结果。但现在我想对这个结果进行搜索过滤。

我用过 scopeSearch但我不确定如何在结果集上进行搜索。

目前我有这样一个范围:

public function scopeSearch($query, $search) {
  $query->where('username', 'LIKE', '%'.$search.'%')
     ->orWhere('name', 'LIKE', '%'.$search.'%')
}

所以当我 Page::with('user')->search('Test')->get()它不工作。 问题(可能)是 username列是 User 的一部分表和 namePage 的一部分表。

我如何能够使用范围或熟悉的东西来搜索结果集,而不在大多数查询中重复它?

最佳答案

您需要在User 模型中创建scopeSearch,您应该这样使用它:

$posts = Page::with('user')->whereHas('user', function($q) use ($search)
{
    $q->search($search);

})->get();

关于php - 关系的 Eloquent 查询范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26978968/

相关文章:

php - 如果 Locations 相等,则将多个结果合并为一个

laravel - Mac OS X Mojave 需要 Mcrypt PHP 扩展

laravel - 为模型设置数据库?

php - Preg_match 差异?

javascript - 隐藏表行未显示正确信息

php - 使用 Steam OpenID 的用户数据库

php - 如何在 Laravel(PHP artisan )中删除 Auth

迁移时用户 root@localhost 的 Laravel 5.4 访问被拒绝

php - laravel compact() 和 ->with()

mysql - Eloquent:嵌套查询在有限结果中恢复顺序