2015-12-01 4 views
1

Вот запрос:Как преобразовать запрос MySQL в запрос Laravel Eloquent?

SELECT * FROM `users` as m 
left join `tutor_segments` as ts on m.id = ts.tutor_id 
left join subject_segments as seg on ts.segment_id = seg.id 
left join users_area as ua on ua.user_id=m.id 
left join area as a on ua.area_id=a.id 
where m.user_type=2 and (seg.segment_name like '%s%' 
or a.area_name like '%s%' or m.area like '%s%') 
group by m.id; 

как построить Laravel запрос с построитель запросов для этой части and (seg.segment_name like '%s%' or a.area_name like '%s%' or m.area like '%s%')

ответ

0

Вы можете написать сырые запросы в Laravel whereRaw()

$users = DB::table('users') 
->leftJoin('tutor_segments', 'users.id', '=', 'tutor_segments.tutor_id') 
->leftJoin('subject_segments', 'tutor_segments.segment_id', '=', 'subject_segments.id') 
->leftJoin('users_area', 'users_area.user_id', '=', 'users.id') 
->leftJoin('area', 'user_area.area_id', '=', 'area.id') 
->whereRaw("users.user_type=2 and (subject_segments.segment_name like '%s%' or area.area_name like '%s%' or users.area like '%s%')") 
->select('users.*') 
->groupBy('users.id') 
->get(); 

@Antony Thompson ему нужно, чтобы выбрать все данные из таблицы пользователей, так что нужно использовать ->select('users.*') вместо ->select('*') и ваш запрос будет генерировать ошибку, поскольку вы не создали псевдонимы для выбранных таблиц.

+0

Это просто, и я использовал этот, спасибо за ваше драгоценное время, чтобы помочь мне –

+0

@ user1912870 Приятно знать, что я только что приготовил что-то после прочтения ларавельных документов. Я сейчас собираюсь начать свой первый проект с laravel на самом деле :-) и люблю его до сих пор. –

0

Может быть, как это? Я вообще не использовал laravel, но, согласно документам, как вы это делаете.

http://laravel.com/docs/4.2/eloquent 

http://laravel.com/docs/5.1/queries 

Код

$users = DB::table('users') 
    ->leftJoin('tutor_segments', 'users.id', '=', 'tutor_segments.tutor_id') 
    ->leftJoin('subject_segments', 'tutor_segments.segment_id', '=', 'subject_segments.id') 
    ->leftJoin('users_area', 'users_area.user_id', '=', 'users.id') 
    ->leftJoin('area', 'user_area.area_id', '=', 'area.id') 
    ->select('users.*') 
    ->whereRaw(
     'users.user_type=2 and 
     (
      subject_segments.segment_name like ? 
      or 
      area.area_name like ? or users.area like ? 
     )', array('%s%', '%s%', '%s%') 
    ) 
    ->groupBy('users.id') 
    ->get(); 
+0

большое спасибо за ваш ответ, попробуй это –

+0

Я только что обновил его. Удостоверьтесь, что вы получили последнее. –

1

Попробуйте это,

$users = DB::table('users') 
    ->leftJoin('tutor_segments', 'users.id', '=', 'tutor_segments.tutor_id') 
    ->leftJoin('subject_segments', 'tutor_segments.segment_id', '=', 'subject_segments.id') 
    ->leftJoin('users_area', 'users_area.user_id', '=', 'users.id') 
    ->leftJoin('area', 'user_area.area_id', '=', 'area.id') 
    ->where('users.user_type', 2) 
    ->where(function($query){ 
    $query->where('area.area_name', 'LIKE', '%s%') 
     ->OrWhere('users.area_name', 'LIKE', '%s%') 
     ->OrWhere('subject_segments.segment_name', 'LIKE','%s%'); 
    })  
    ->groupBy('users.id') 
    ->get(); 

читать doc а.

0
DB::table('users') 
     ->leftJoin('tutor_segments', 'users.id', '=', 'tutor_segments.tutor_id') 
     ->leftJoin('subject_segments', 'subject_segments.segment_id', '=', 'tutor_segments.tutor_id') 
     ->leftJoin('users_area', 'users_area.user_id', '=', 'users.id') 
     ->leftJoin('area', 'area.id', '=', 'users_area.area_id') 
     ->where('users.user_type', 2) 
     ->where(function($query){ 
      $query->where('subject_segments.segment_name', 'LIKE', '%s%') 
      ->orWhere('area.area_name', 'like', '%s%') 
      ->orWhere('users.area', 'like', '%s%') 
      }) 
     ->groupBy('users.id') 
     ->get(); 

Смежные вопросы