Помогите мне преобразовать SQL-запрос в Laravel Eloquent - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть этот запрос SQL:

SELECT *, count(*) as mostView FROM users RIGHT JOIN visitors ON users.id = visitors.user_id GROUP BY users.id HAVING users.isActive=1 AND users.fullName IS NOT NULL AND users.photo_id IS NOT NULL AND users.role_id IN(1, 3) ORDER BY mostView DESC LIMIT 5

Это работает, но мне нужно конвертировать в Laravel eloquent, я использую laravel 5.6, может ли кто-нибудь помочь мне заранее спасибо

Ответы [ 3 ]

0 голосов
/ 04 сентября 2018

Не собираюсь подавать с ложки, но могу дать вам некоторые идеи по преобразованию raw sql в eloquent, ваш sql в идеале должен выглядеть следующим образом:

User::selectRaw('*', 'count(*) as mostView')
    ->rightJoin()
    ->groupBy()
    ->having()
    ->where // whereNotNull // wherIn
    ->orderBy()
    ->take(5)
    ->get();

Пожалуйста, обратитесь к документации по Laravel: https://laravel.com/docs/5.6/queries

0 голосов
/ 04 сентября 2018

Спасибо за все, что я изучаю База данных: Query Builder по ссылке https://laravel.com/docs/5.6/queries

и я решил свой вопрос сам ответ:

$mostViews = DB::table('users')
->rightJoin('visitors', 'users.id' , '=' , 'visitors.user_id')
->select('users.*', DB::raw('count(*) as mostView'))
->where('isActive', '=', '1')
->whereNotNull('fullName')
->where('photo_id', '<>', 'NULL')
->where(function ($q){
    $q->where('role_id', '=', '1')
    ->orWhere('role_id', '=', '3');
})
->groupBy('user_id')
->orderBy('mostView', 'desc')->take(5)->get();
0 голосов
/ 04 сентября 2018

Я предполагаю, что у вас есть карта отношений в вашей модели, если вы можете сделать, как показано ниже,

$userViews = User::->with('vistors')
->where('isActive',1)
->whereNotNull('fullName')
->whereNotNull('photo_id')
->whereIn('role_id ',[1,3])
->get();

$mostView = $userViews->sortBy(function ($collection) {
   return  $collection->vistors->count()
})->take(5)

надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...