首页 > 解决方案 > Laravel 从列或外键过滤

问题描述

我有一个subscriptions带有user_id, date_from, date_to, plan,status列的表。在刀片文件中,只有一个过滤器文本框。我想根据这些列或用户表中的字段fname进行mname过滤。lname如何正确地做到这一点?到目前为止,这是我的代码。

$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);

标签: laraveleloquent

解决方案


试试这个:

$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);

推荐阅读