Laravel Eloquent搜索多个相关表格

时间:2016-05-10 18:55:42

标签: php laravel eloquent laravel-5.2

我正在努力弄清楚如何针对多个相关表运行like查询。

我有一个submissions表,其中包含相关的usersmcd_formssubmission_statuses表。

以下是我使用给定LIKE运行$terms_like语句的代码。

        $submission = new Submission;

        $terms_like = '%'.$search_terms.'%';

        $data['submissions'] = $submission
            ->join('users as users', 'users.id', '=', 'submissions.user_id')
            ->join('mcd_forms as forms', 'forms.submission_id', '=', 'submissions.id')
            ->join('submission_statuses as statuses', 'statuses.id', '=', 'submissions.submission_status_id')
            ->where(function($q) use ($terms_like) {
                $q->where('users.user_group_id', '=', Auth::user()->user_group_id)
                ->orWhere('forms.name', 'like', $terms_like)
                ->orWhere('forms.custom_id', 'like', $terms_like)
                ->orWhere('forms.start_date', 'like', $terms_like)
                ->orWhere('forms.end_date', 'like', $terms_like)
                ->orWhere('forms.soft_sell_date', 'like', $terms_like)
                ->orWhere('forms.region', 'like', $terms_like)
                ->orWhere('statuses.status_formatted', 'like', $terms_like);
            });

无论我尝试什么,都会返回不正确的结果。我做错了什么?

2 个答案:

答案 0 :(得分:0)

在上面的查询中,由于您没有使用“%”符号,因此您的like子句以“=”的形式工作,因为它试图匹配整个单词。

替换所有“where”子句,如下所示:

->orWhere('forms.name', 'like', "%".$terms_like."%")

这将尝试在文本中的任何位置匹配单词。

答案 1 :(得分:0)

你可以尝试'喜欢'运算符:

$users = DB::table('users')
            ->where('forms.name','LIKE', '%'.$terms_like.'%')
            ->get();