У меня есть запрос SQL, где я преобразую столбец в SIGNED, чтобы сравнить его с целым числом. Моя таблица "Планеты" выглядит следующим образом
id | name | galaxy | region
1 | S1 | 00 | 01
2 | S2 | 00 | 01
3 | S3 | 00 | 02
4 | S4 | 01 | 00
5 | S5 | 00 | 00
Существуют сотни записей, принадлежащих разным галактикам (0-99) и регионам (0-99)
Галактика и области столбцов задаются как строки для хранения их с начальным 0. Возможно, это не лучший способ сделать это, но я так и сделал.
У меня есть переменная, как показано ниже
$planet = Planet::where('galaxy', '00')->get();
Тогда у меня есть ниже l oop, чтобы вывести планеты, принадлежащие галактике 00 и определенной области, циклически проходя через каждую возможную область (0 - 99) и печатая счет.
$count = 0;
while($count < 100){
echo $planet->whereRaw('CAST(region as SIGNED) = '.$count)->count();
$count++;
}
Вещи то есть, первое целое число (где $ count равно 0) возвращает результаты, но любое последующее l oop ничего не возвращает. Если бы я установил для $ count другое значение, та же история - сначала l oop сработает, но ни один из следующих циклов не будет.
Любые идеи о том, почему это может иметь место, будут очень признательны. У меня есть echo'd $ count в l oop, чтобы дважды проверить, что он определенно печатает числа в диапазоне от 0 до 99, и это так, поэтому не уверен, почему он не возвращает результаты в запросе SQL, кроме первого.
РЕДАКТИРОВАТЬ: То, что я пытаюсь достичь, изображено ниже:
В основном существуют тысячи планет, каждая из которых находится в галактике и области. Галактики с номерами 00-99, как и регионы.
Я буду go на URL /map/00
, сообщая мне, на какую галактику я смотрю, тогда будет вышеупомянутая сетка 10 x 10, каждая секция содержащий количество планет в этой области этой галактики. Каждая сетка - это div, который создается в то время как l oop.
Таким образом, фактическое значение l oop выглядит следующим образом:
$count = 0;
while($count < 100){
echo "<div class="inline-flex w-1/10">
echo $planet->whereRaw('CAST(region as SIGNED) = '.$count)->count();
echo "</div>
$count++;
}
Счет на месте, поэтому мы знаем в какой части сетки мы находимся, и поэтому фильтруем запрос $ astros-> whereRaw, чтобы сосредоточиться на этом регионе. Поскольку фактическая таблица является строкой, а не целым числом, мне нужно привести ее в качестве поля SIGNED для выполнения запроса where. Итак, запрос SQL, который я на самом деле ищу, ниже:
SELECT * FROM planets WHERE galaxy = 00 AND CAST(region as SIGNED) = $count