Laravel从列或外键过滤

时间:2019-11-08 08:10:02

标签: laravel eloquent

我有一个subscriptions表,其中包含user_iddate_fromdate_toplanstatus列。在刀片文件中,只有一个过滤器文本框。我想根据这些列或用户表中的fnamemnamelname字段进行过滤。如何正确地雄辩地做到这一点?到目前为止,这是我的代码。

$subscriptions = Subscription::where(function ($query) use ($q) {
    $query->orWhere('plan', 'LIKE', '%' . $q . '%')
        ->orWhere('date_from', 'LIKE', '%' . $q . '%')
        ->orWhere('date_to', 'LIKE', '%' . $q . '%')
        ->orWhere('status', 'LIKE', '%' . $q . '%');
})->orWhereHas('user', function ($query2) use ($q) {
    $query2->orWhere('fname', 'LIKE', '%' . $q . '%');
    $query2->orWhere('mname', 'LIKE', '%' . $q . '%');
    $query2->orWhere('lname', 'LIKE', '%' . $q . '%');
})->orderBy('id', 'desc')
    ->paginate(10)->appends('q', $q);

1 个答案:

答案 0 :(得分:1)

尝试一下:

$subscriptions = Subscription::where(function ($query) use ($q) {
    $query->where('plan', 'LIKE', '%' . $q . '%')
            ->orWhere('date_from', 'LIKE', '%' . $q . '%')
            ->orWhere('date_to', 'LIKE', '%' . $q . '%')
            ->orWhere('status', 'LIKE', '%' . $q . '%');
})->orWhereHas('user', function ($query2) use ($q) {
    $query2->where('fname', 'LIKE', '%' . $q . '%')
           ->orWhere('mname', 'LIKE', '%' . $q . '%')
           ->orWhere('lname', 'LIKE', '%' . $q . '%');
})->orderBy('id', 'desc')->paginate(10)->appends('q', $q);