Как написать этот запрос в laravel? Какие-либо предложения? - PullRequest
0 голосов
/ 10 марта 2020

Это запрос, который отлично работает в MY SQL:

SELECT users.name FROM ((event_user INNER JOIN events ON event_user.event_id = events. id) INNER JOIN users ON event_user.user_id = users.id) где events.name, например, «% FEB%» или users.name, например, «% FEB%», или users.email, например, «% FEB%», или users.phone like ». % FEB% '

enter image description here

Это то, что я написал, что, конечно, не работает:

$data['search_data'] = EventUser::select('users.*')
        ->join
            ('users', 'event_user.user_id', '=', 'users.id')
        ->join
            ('events', 'event_user.event_id', '=', 'events.id')
        ->where
            ('events.name','like', "'$search'")
        ->orWhere
            ("users.id",'like', "'$search'")
        ->orWhere
            ("users.name",'like', "'$search'")
        ->orWhere
            ("users.phone",'like', "'$search'")
        ->orWhere
            ("users.email",'like', "'$search'")
        ->orWhere
            ("users.password",'like', "'$search'")
        ->orWhere
            ("users.work_location",'like', "'$search'")
        ->orWhere
            ("users.profession",'like', "'$search'")
        ->orWhere
            ("users.designation",'like', "'$search'")
        ->orWhere
            ("users.committee",'like', "'$search'")
        ->orWhere
            ("users.role",'like', "'$search'")
        ->orWhere
            ("users.bio",'like', "'$search'")
        ->paginate(10);

Хорошо, с помощью всех. У меня есть решение. Спасибо всем.

     $data['search_data'] = EventUser::select('users.*', 'events.name as e_name')
        ->join('users', 'event_user.user_id', '=', 'users.id')
        ->join('events', 'event_user.event_id', '=', 'events.id')
        ->where('events.name', 'like', '%'.$search.'%')
                ->orWhere('users.id', 'like', '%'.$search.'%')
                ->orWhere('users.name', 'like', '%'.$search.'%')
                ->orWhere('users.phone', 'like', '%'.$search.'%')
                ->orWhere('users.email', 'like', '%'.$search.'%')
                ->orWhere('users.password', 'like', '%'.$search.'%')
                ->orWhere('users.work_location', 'like', '%'.$search.'%')
                ->orWhere('users.profession', 'like', '%'.$search.'%')
                ->orWhere('users.designation', 'like', '%'.$search.'%')
                ->orWhere('users.committee', 'like', '%'.$search.'%')
                ->orWhere('users.role', 'like', '%'.$search.'%')
                ->orWhere('users.bio', 'like', '%'.$search.'%')
            ->distinct()
        ->paginate(10);

Но это все еще возвращает повторяющиеся результаты.

Ответы [ 2 ]

2 голосов
/ 10 марта 2020

Вам нужно объединить $search с % следующим образом:

->where('events.name','like', '%'.$search.'%')
0 голосов
/ 10 марта 2020

хм, это длинный запрос, я думаю, вы можете проверить это:

$data['search_data'] = EventUser::select('users.*')
    ->join('users', 'event_user.user_id', '=', 'users.id')
    ->join('events', 'event_user.event_id', '=', 'events.id')
    ->where('events.name', 'like', '%'.$search.'%')
    ->where(function ($query) use ($search) {
        $query->where('title', 'LIKE', '%'.$search.'%')
        ->orWhere('users.id', 'LIKE', '%'.$search.'%')
        ->orWhere('users.name', 'LIKE', '%'.$search.'%')
        ->orWhere('users.phone', 'LIKE', '%'.$search.'%')
        ->orWhere('users.email', 'LIKE', '%'.$search.'%')
        ->orWhere('users.password', 'LIKE', '%'.$search.'%')
        ->orWhere('users.work_location', 'LIKE', '%'.$search.'%')
        ->orWhere('users.profession', 'LIKE', '%'.$search.'%')
        ->orWhere('users.designation', 'LIKE', '%'.$search.'%')
        ->orWhere('users.committee', 'LIKE', '%'.$search.'%')
        ->orWhere('users.role', 'LIKE', '%'.$search.'%')
        ->orWhere('users.bio', 'LIKE', '%'.$search.'%')
   })
   ->paginate(10);

Надеюсь, это поможет. Дайте нам знать, если это сработало!

...