Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 Re: Laravel 6/7/8/9/10 » Изменить порядок вывода данных из MySQL » 26.01.2021 18:07:50

Так и делай: добавляй новое поле, например, position, а в SELECT добавляй ... ORDER BY position DESC.

У меня на данный момент так и сделано, но сдвигать вниз все записи через цикл, это то еще занятие. Ищу решение проще.
на данный момент остановился на поднятии опускании по одному элементу.
Это конечно дико костыль но другого решения пока что не нашел.

public function topsetget(Request $r,$topget,$up_down)
    {
$redirect = $topget;
$all = DB::table('top')->count();//		
if($up_down=="up" && $topget!="1"){		
DB::table('top')->where('top', $topget)->update(['top' => "100000"]);//который нужен буферим 
DB::table('top')->where('top', $topget-1)->update(['top' => "100001"]);//который вышее будем опускать. но пока тоже буферим
DB::table('top')->where('top', "100001")->update(['top' => $topget]);//который был нужен поднимаем вместо буфера выше.
DB::table('top')->where('top', "100000")->update(['top' => $topget-1]);//который был выше опускаем. из буфера.
$redirect = $topget-1;
}else if($up_down=="down" && $topget!=$all){
DB::table('top')->where('top', $topget)->update(['top' => "100000"]);//наоборот.
DB::table('top')->where('top', $topget+1)->update(['top' => "100001"]);
DB::table('top')->where('top', "100001")->update(['top' => $topget]);
DB::table('top')->where('top', "100000")->update(['top' => $topget+1]);
$redirect = $topget+1;
	}		
return redirect()->route('index',  ['#topgo'.$redirect]);

#2 Laravel 6/7/8/9/10 » Изменить порядок вывода данных из MySQL » 22.01.2021 21:57:25

Tvis2010
Ответов: 3

Есть база, так скажем ТОП автомобилей.
Назовем ее topauto, в ней несколько столбцов: id(авто приращение) и name.
допустим у меня там 5 строк (5 автомобилей) сортировка пусть будет по id.
1 Логан
2 Дастер
3 Приора
4 Копейка
5 Десятка

Внезапно автомобиль в позиции 4 стал популярен, и его надо сделать 2-рым по списку.
вот так:
1 Логан
2 Копейка
3 Дастер
4 Приора
5 Десятка
Как же это реализовать? хорошо даже если я добавлю новый столбец которому будет название topnum и будет хранить текущую позицию и сортировать я буду по нему, вопроса это все равно не отменяет.

Нужно именно "воткнуть" в нужное место списка (и остальные сдвинуть вниз или вверх), а не поменять местами.
буду благодарен за возможные решения.

#3 Re: Laravel 5.x » Помогите сделать нужное вхождение таблиц » 07.03.2019 11:35:38

->hasMany('App\Models\JackpotBets', 'game_id')->where('JackpotBets.room','Jackpot.room');тоже не работает?

Если подставлять именно в ручную значение комнаты в >where то работает, а так как вы предложили не пробовал.
К сожалению проверить смогу не раньше чем через 2 недели.. Спасибо за предложение.

#4 Re: Laravel 5.x » Помогите сделать нужное вхождение таблиц » 07.03.2019 10:50:13

Как я понимаю, эти две модели у вас связаны. Скорее всего даже отношением один ко многим. Почитайте документацию по поводу функций - model::with(), model::has(), model::whereHas()То есть если у тебя в моделе Jackpot прописано отношение типа

public function названиеОтношения() {
	return $this->hasMany('App\Models\JackpotBets', 'game_id');
}

Тогда ты сможешь прописывать конструкции, о которых написал выше.

Да, я пробовал и так делать, но вот беда. У меня 2 условия 'game_id' и 'room'. Что через отношения я реализовать так и не смог.

#5 Laravel 5.x » Помогите сделать нужное вхождение таблиц » 25.02.2019 22:22:06

Tvis2010
Ответов: 4

Привет всем smile
Вобщем такая беда, уже на протяжении целого дня не могу нормально сделать вхождение таблиц
сразу скажу, я не супер пупер кодер и тд - новичок я smile
Задача следующая:
Есть 2 таблицы одна jackpot другая jackpot_bets
используются через модели (Jackpot:: и JackpotBets::) соответсвенно.
Нужно получить список записей из Jackpot с некоторыми условиями: ->where('status', 0)->where('room', 'lol').
в полученную коллекцию добавить новый элемент предположим "betsuser" из JackpotBets по условиям jackpot.game_id = jackpot_bets.game_id, jackpot.room = jackpot_bets.room, jackpot.winner_id = jackpot_bets.user_id .
Чтобы это выглядело так чтобы в обьекте Jackpot появился массив "betsuser" с содержимым из условий выше.
Пробовал разные конструкции по типу этой:

Jackpot::where('jackpot.room', 'lol')
		->where('jackpot.status', 3)
		->rightJoin('jackpot_bets', function ($join) {
            $join->on('jackpot.game_id', '=', 'jackpot_bets.game_id')->orOn('jackpot.room', '=', 'jackpot_bets.room')->orOn('jackpot.winner_id', '=', 'jackpot_bets.user_id');
        })
	    ->select(['jackpot.*', 'jackpot_bets.items as betsuser'])
		->orderBy('jackpot.id', 'desc')
		->get();

Вроде бы близко к нужному результату. Но вот проблема в том что betsuser не содержит массив, а только 1 запись из jackpot_bets, причем дублируя записи jackpot, но уже с новым betsuser = jackpot_bets.

Подвал раздела