Я запускаю построитель запросов в моем приложении laravel, используя внутреннее соединение. Но Laravel продолжает выдавать ошибки, я протестировал запрос MySql, который я написал прямо в моей базе данных, используя phpMyAdmin, он отлично работает
SELECT
u.id, u.first_name, u.last_name, u.username, u.sponsor,u.deleted_at, i.id as investment_id, i.total_amount, i.created_at
FROM
users AS u
JOIN investments as i ON
i.id= ( SELECT i1.id FROM investments as i1 where u.id=i1.user_id and i1.status ='confirmed' ORDER BY i1.created_at LIMIT 1)
WHERE
u.sponsor = '901d08da-e6c4-476a-ae7b-9386990b8b9e' AND u.deleted_at is NULL
ORDER BY
created_at DESC
, но когда я пишу его с помощью построителя запросов, это не сработает.
$refered_users = DB::table('users')
->join('investments', function ($join) {
$join->on('users.id', '=', 'investments.user_id')
->where('investment.status', '=', 'confirmed')
->orderBy('investment.created_at','desc')->first();
})
->select('users.id,users.first_name,users.last_name,users.username,users.sponsor,investment.id AS investment_id,investment.total_amount,investment.created_at')
->where('users.sponsor','=',Auth::User()->id)
->orderBy('investment.created_at','desc')
->paginate(10);
Я попробовал RAW DB::select()
, и он работает, но я хочу использовать построитель запросов, чтобы разбить результаты на страницы. Вот как устроен мой стол:
пользователи id, first_name, last_name, username, sponsor(id of another user), created_at, deleted_at
инвестиции id, total_amount , user_id(id of a user), status, created_at, deleted_at
Я не очень хорош с SQL Запросы, поэтому, если я все пишу неправильно, пожалуйста, не ругайте, попробуйте объяснить немного подробнее, чтобы я мог понять
Это ошибка выходит:
Подсветка \ База данных \ QueryException
SQLSTATE [42000]: синтаксическая ошибка или нарушение доступа: 1064 В синтаксисе SQL имеется ошибка; проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса для использования рядом с 'на users
. id
= investments
. user_id
и investment
. status
=? Order by 'в строке 1 (SQL: выберите * on users
. id
= investments
. user_id
и investment
. status
= подтвержденный заказ по investment
. created_at
des c предел 1)
выход dd
select first_name,last_name,username,deleted_at,total_amount,
investment_created_at,user_id from `users`
inner join (select user_id,total_amount,status,created_at AS investment_created_at from `investments`
where `status` = ? and `investments`.`deleted_at` is null) as `confirmed_investments`
on `users`.`id` = `confirmed_investments`.`user_id`
where `sponsor` = ? order by `investment_created_at` desc ◀`
`array:2 [▼ 0 => "confirmed" 1 => "901d08da-e6c4-476a-ae7b-9386990b8b9e" ]`
, использующий:
PHP версия: 7.3.1
MySql Версия: 8.0.18