@laravel_pro

Страница 510 из 2014
∀RTUR
12.06.2017
17:19:26
добавить всего AND paid until > now

ну и first

я не знаю как сделать)

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

Google
DDiimmkkaass
12.06.2017
17:22:01
ты когда делаеш Post::with('tags')->get() - то в ларавела это будет два запроса один для постов, другой для тегов к ним ты сейчас показал запрос, который у тебя тянет самих пользователей а проблема как раз в другом запросе, том который тянет пеймент для пользователя (если я верно понял суть проблемы)

∀RTUR
12.06.2017
17:23:35


DDiimmkkaass
12.06.2017
17:24:22
что за ошибка?

и попробуй все-таки убрать оттуда first()

∀RTUR
12.06.2017
17:25:01
BadMethodCallException: Method whereHas does not exist.

DDiimmkkaass
12.06.2017
17:25:15
)

после get() - whereHas уже не доступен

там же уже колекция

DDiimmkkaass
12.06.2017
17:36:10
не понял что ты хочеш сделать? если вывести то что вытягивает $test, тогда dd($test->get())

Google
∀RTUR
12.06.2017
17:37:30
он должен sql запрос вывести

а потом уже посмотреть результаты

через ->get

DDiimmkkaass
12.06.2017
17:38:27
ну тогда dd($test->toSql(), $test->get())

∀RTUR
12.06.2017
17:40:33
ну тогда dd($test->toSql(), $test->get())
не знал что так можно

в итоге сейчас всё так же само)

такой же результат



выводит всех у кого просто есть в payments запись



а надо paid until > now() limit 1

DDiimmkkaass
12.06.2017
17:45:52
кинь код, не хочу переписывать с картинки

∀RTUR
12.06.2017
17:48:11
$test = TelegramBotUser::with(['payments' => function ($q) { return $q->where('paid_until', '>', Carbon::now())->first(); }]); return $test->whereHas('payments.price', function ($q) { return $q->whereIn('package_id', [2, 3]); });

DDiimmkkaass
12.06.2017
17:52:13
выводит всех у кого просто есть в payments запись
а надо paid until > now() limit 1 так тебе нужно, только тех пользователей у которых есть payments.price с pakage_id = 2 или 3 и для каждого из них по одному пейменту с paid_until > now() или всех пользователей у которых есть payments.price с pakage_id = 2 или 3 и при этом что б payments брались только те у которых paid_until > now() ну и соответственно для пользователей подтягивался первый такой платеж ?

Google
∀RTUR
12.06.2017
17:54:49
что работает сейчас. потому что может быть их несколько. период работы каждой идет один за другим

user: id 1 2 3 payments: id | user_id | package_price_id | amount 1 | 1 | 1 | 200 2 | 1 | 2 | 250 3 | 2 | 3 | 300 package_prices: id | months | package_id 1 | 1 | 1 2 | 2 | 1 ... 12 | 12 | 1 ... 13 | 1 | 2 packages id | name 1 | test 2 | middle 3 | full

вот собственно все модели

DDiimmkkaass
12.06.2017
17:58:04
там просто разница в запросах будет твой код подходит для первого (собственно то что тебе и надо) а второй вариант, там будет еще одно условие - но раз это не оно, то и не буде акцентировать

а paid_until где?)

ясно, что в payments, но на скрине просто без)

∀RTUR
12.06.2017
18:02:44
это копипаста старая

просто не написал

∀RTUR
12.06.2017
18:03:02
уже бился в чаты с просьбой помощи)

DDiimmkkaass
12.06.2017
18:03:22
)

думаю надо ити от меньшего $test = TelegramBotUser::with(['payments' => function ($q) { $q->where('paid_until', '>', Carbon::now()); }]); dd($test->get())

это должно вернуть пользователей и для них только те пейменты у которых paid_until > Carbon::now()

Google
DDiimmkkaass
12.06.2017
18:11:23
так и должно быть

все пользователи

смотри теперь в пейменты для них

∀RTUR
12.06.2017
18:11:55
"select * from `telegram_bot_users`" 1 2018-05-09 00:00:00 что-то такое вывело toSql

DDiimmkkaass
12.06.2017
18:11:59
там должны быть только те пейменты у которых 'paid_until', '>', Carbon::now()

∀RTUR
12.06.2017
18:12:06
у них нет payment'ов

у всех

DDiimmkkaass
12.06.2017
18:13:28
значит ни у кого из пользователей нет пейментов для которых 'paid_until', '>', Carbon::now()

так?

∀RTUR
12.06.2017
18:14:06
из тех что вывелось - это те у которых есть пейменты и у которых нет

Admin
ERROR: S client not available

∀RTUR
12.06.2017
18:14:09
это просто все

оч странно

DDiimmkkaass
12.06.2017
18:15:13
ну в этом запросе и нет условия каких пользователей выводить

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

∀RTUR
12.06.2017
18:17:29
определенно нет :D

до этого правильно было вроде

только что-то не цеплялось что нужно

DDiimmkkaass
12.06.2017
18:18:37
только что-то не цеплялось что нужно
правильно, пейменты не тянулись нужные

∀RTUR
12.06.2017
18:18:41
нужно вывести всех у кого есть payments?

Google
∀RTUR
12.06.2017
18:19:30
хотел предложить кое-что, но сам понял что не знаю как)

DDiimmkkaass
12.06.2017
18:19:30
у тебя запрос на выбор пользователей работает верно, поетому его можно откинуть и разобраться со связью

потому как в ней проблема

DDiimmkkaass
12.06.2017
18:21:21
вот тот код, который я скинул и только что тестили, как раз должен вытянуть для каждого из пользователей только те пейменты которые подходят под условие 'paid_until', '>', Carbon::now()

поетому я и спросил - правильно ли для пользователей выбираються пейменти

∀RTUR
12.06.2017
18:25:02
этой связи?

payments: $this->hasMany(Payment::class, 'user_id');

а

кажется не так сделал

на выводе

DDiimmkkaass
12.06.2017
18:27:15
пейменты, но он вытянул пользователей
пользователей и для них пейменты - это он должен сделать

∀RTUR
12.06.2017
18:28:00


DDiimmkkaass
12.06.2017
18:28:27
вот, а теперь нужно смотреть в relation для пользователей

и там где есть масив payments должны быть только те пейменты у которых paid_until', '>', Carbon::now()

∀RTUR
12.06.2017
18:30:54
момент

не момент?



хочу вывести пейменты те самые

сейчас попробую цикл в цикле

Страница 510 из 2014