代码之家  ›  专栏  ›  技术社区  ›  Rhythm

如何使用Laravel whereRelation在关系表的多列中搜索字符串?

  •  0
  • Rhythm  · 技术社区  · 2 年前

    我和空间模型有关系,

    public function user()
    {
      return $this->belongsTo(User::class)->withTrashed();
    }
    

    在我的控制器中,我想从两列“first\u name”中搜索字符串“users”表中的last\u name。

    但我没有找到写“或”条件whereRelation的语法。

    $query = new Space();
    
    $query = $query->with('user')->whereRelation('user', 'first_name', 'like', '%' . $request->search . '%');
    

    如何使用whereRelation在关系表的多列中搜索字符串?

    0 回复  |  直到 2 年前
        1
  •  0
  •   Michael Grove    2 年前

    选项1。 您可以分别从两个字段进行搜索:

    Space::with('user')->whereHas('user', function ($query) use ($request) {
        $query->where('first_name', 'LIKE', '%' . $request->search . '%')
            ->orWhere('last_name', 'LIKE', '%' . $request->search . '%');
    });
    

    选项2。 我猜您真正想要的是将这两个字段连接在一起,中间有一个空格,并将您的搜索与此进行比较:

    use Illuminate\Support\Facades\DB;
    
    // ...
    
    Space::with('user')->whereHas('user', function ($query) use ($request) {
        $query->where(
            DB::raw('CONCAT(first_name, " ", last_name)'),
            'LIKE',
            '%' . $request->search . '%'
        );
    });