如何在类似搜索中使用ORM从两个表中获取数据-使用Laravel

时间:2019-08-06 08:12:23

标签: php laravel search eloquent eloquent--relationship

这是我的控制器代码:

         public function searchUser(Request $request)
{
    $pram = $request->name;

    $data['users'] = User::whereHas('userBasicInfo', function ($query) use ($pram) {
        $query->where('first_name', 'like', '%' . $pram . '%')
            ->orWhere('middle_name', 'like', '%' . $pram . '%')
            ->orWhere('last_name', 'like', '%' . $pram . '%');
    })->with(['userBasicInfo' => function ($query) use ($pram) {
        $query->where('first_name', 'like', '%' . $pram . '%')
            ->orWhere('middle_name', 'like', '%' . $pram . '%')
            ->orWhere('last_name', 'like', '%' . $pram . '%');
    }])->get();

    return $data;
}

我与userBasicInfo有用户关系,我可以用first_name,middle_name和last_name搜索,而我的请求参数是name

现在,我想使用用户电子邮件进行搜索,并且将在用户表中再添加一个请求参数,即电子邮件和电子邮件

我也可以通过用户电子邮件进行搜索,我很困惑,请任何人帮助我

我们将非常感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

尝试

$data['users'] = User::with('userBasicInfo')
            ->where('email', 'like', '%' . $pram . '%') //this is from use table
            ->orWhereHas('userBasicInfo', function($query) use($pram) {
                //search in basic info table
                $query->where('first_name', 'like', '%' . $pram . '%')
                    ->orWhere('middle_name', 'like', '%' . $pram . '%')
                    ->orWhere('last_name', 'like', '%' . $pram . '%');
            })
            ->get();

您无需从搜索表单中发送其他值。单个值可用作搜索值。