Используя Laravel 5.4 и PHP 7.0+, mysql 5.7, у меня есть запрос, который возвращает массив с правильной информацией.
модель propoffice
namespace App\models\core;
class propoffice extends \App\Model
{
protected $primaryKey = 'officeID';
}
Вот мой первоначальный запрос
$officeList=propoffice::select('officeID','xOfficeID')
->orderBy('officeID','desc')
->take(1)
->get();
Есть ТОННЫ записей, но давайте просто взглянем на одну. Вот почему у меня пока есть дубль (1).
dd($officeList)
Понимаю
#attributes: array:2 [▼
"officeID" => "123"
"xOfficeID" => "123"
]
#original: array:2 [▼
"officeID" => "123"
"xOfficeID" => "123"
]
Запуск цикла
foreach($officeList as $the){
echo $the->officeID;
}
Вместо 123 - я вижу 0 для поля officeID, но я вижу 123 для поля xOfficeID.
У меня нет javascript или jquery, которые меняют значения или что-то сложное.
Между массивом и выводом нет другого кода, поэтому он должен сводиться к некоторому процессу laravel / php, в котором я не участвую напрямую.
Рассматриваемое поле действительно является именем поля в другом месте, и значения НЕ будут совпадать. Я чувствую, что это корень, но не знаю, как и где искать.
Обновлено: Моя модель установила primaryKey на officeID, который является varchar. Ожидается, что в laravel primaryKey будет целым числом, что ускользнуло от меня. Таким образом, необработанные данные были в порядке, но при возврате значений в выходных данных НЕ-целочисленные значения были преобразованы моделью как 0
Пожалуйста, покажите код для $officeList
Вопрос показывает точные данные, которые я ожидаю просмотреть или запросить значения. поле officeID преобразуется в ноль или 1, в то время как другое поле отображается, как ожидалось. Единственное отличие - это название поля. Итак, я сделал удар в темноте, что, возможно, из-за имени поля, существующего на другой таблице.
Этот dd показывает $ officeList как модель, а не как коллекцию ...
Да, это модель. В нем нет ничего, кроме ссылки на primaryKey и tablename. Никаких отношений на данный момент не установлено. Однако рассматриваемое поле действительно является именем поля в другом месте, и значения НЕ будут совпадать. Я чувствую, что это корень, но не знаю, как и где искать. Между массивом и выводом нет другого кода, поэтому он должен сводиться к некоторому процессу laravel / php, в котором я не участвую напрямую
Зачем вам перебирать модель?
$ the-> officeID; должен выдать ошибку. Вы уверены, что он покажет вам результат? в этом цикле вы должны попробовать, например, echo $the", $ the в виде строки
почему вы использовали цикл для одного результата?
Я получил результаты, запросив модель и перебрал ее. Опубликованные мной выходные данные просто показывают вам структуру и то, что я могу успешно с ней взаимодействовать, но имя поля officeID возвращает 0 вместо значения, которое я вижу в структуре.
Вы, ребята, упускаете суть вопроса. Я не просматриваю модель или один результат. Мой вопрос связан с тем, почему моя переменная возвращается как ноль или 1 вместо того, что я вижу в результатах? Я могу отлично просмотреть результаты и показать все, но ОДНО поле преобразуется в ноль или единицу вместо того, что я на самом деле вижу в результатах.
Что ж, ваш вопрос должен быть воспроизведен, чтобы мы могли даже начать понимать, почему это так, но сейчас похоже, что вы либо представили неверный псевдокод, либо не обращаетесь к данным должным образом.
@weekapaug, пожалуйста, проверьте мой ответ
Считайте, что все поля отображаются нормально при циклическом просмотре. Они ВСЕ выводят в точности так, как я вижу в дампе, но по какой-то неизвестной причине это ОДНО поле отображается как НУЛЬ или 1, несмотря на то, что я вижу реальное значение перед выводом.
вы показываете их с echo $the->officeID; в цикле?
Да, в вашем сценарии подумайте об этом. Когда я использую $ the-> officeID, я вижу 0, несмотря на то, что данные показывают 123. Если я использую $ the-> xOfficeID, я вижу 123, как и должно быть. Итак, это поле officeID по какой-то причине получает особую обработку, и это то, что я пытаюсь понять.
Тогда @weekapaug создаст лучший mcve. Это просто конкретная модель, возвращающая 0 для officeID или для всех? Раньше у вас был officeID из другой таблицы, а теперь он исчез, а ваш dd показывает другое, поэтому в вашем вопросе было много запутанной / противоречивой информации.
Можете ли вы узнать об атрибутах вашей модели? потому что это очень странно ... во-первых, все `echo $ the-> officeID;` должны выдавать ошибку -_-
0 значит может быть ложным? Но все равно не имеет смысла, он все равно должен выдавать ошибку
Я думал, что он, возможно, тоже возвращает логическое значение вместо фактического значения, но все поля заполнены, поэтому это не относится к этому. Если это логическое значение, я понятия не имею, против чего он проверяет, или почему он просто не выплевывает именно то, что он показывает, как и для других полей. Возможно, он пытается подключиться к другой таблице с этим officeID, но у меня нигде нет ссылки на него. Есть ли ограничение не использовать ключ, который существует в другой несвязанной таблице?
Я так и думал .. можно скрин модели сделать? Очень хочу увидеть своими глазами.
Я добавил свой запрос в начало вопроса, но на скриншоте больше ничего нет, кроме экрана, на котором будет отображаться 0 там, где вы ожидаете увидеть 123






Вы получаете 0, потому что существует конфликт между вашей моделью и вашей таблицей.
в вашей модели вы устанавливаете officeID в качестве первичного ключа, но в вашей таблице это столбец varchar. Модели ожидают, что столбец primaryKey будет целым числом.
Это дает вам ошибку. Так что вам следует либо
Удалите строку protected $ primaryKey = 'officeID' в вашей модели propoffice
Сделайте поле целым числом, если вам нужно, чтобы оно было первичным ключом.
Выясните, как сделать ваш первичный ключ varchar. (плохая практика).
У меня нет проблем с выводом. У меня проблемы с тем, что результат соответствует тому, что на самом деле показывают результаты. В приведенном выше примере мои результаты говорят, что officeID = 0, независимо от того, что результаты показывают 123. Однако я вижу правильные данные для других имен полей.
Вот странная часть. Если я вставлю dd ($ the) в начало цикла, я увижу, чего ожидать, и это правильно. Если я вставлю dd ($ the-> officeID), он будет отображаться как ноль. Итак, что-то меняется во время $ the-> officeID, чего не происходит во время dd ($ the); какой процесс будет активировать это поведение?
что-то меняется, потому что - я предполагаю, что - $ the-> officeID имеет значение false (0) - на самом деле я должен выдать ошибку, кстати -. @ weekapaug вы можете попробовать с var_dump($the->officeID); и поделиться со мной результатом?
Теперь я вижу это ... int (0) 0. Но это не целое число, если это то, что означает int (0). Это может помочь ... что-то где-то по какой-то причине ожидает целое число? Есть некоторые идентификаторы, которые являются целыми числами, и те, которые отображаются. Теперь, чтобы понять, какая часть процесса заставляет его вообще ожидать чего-то особенного?
Насколько я помню, красноречивые атрибуты модели могут изменять свое значение: отношения, вспомогательные элементы (getOfficeIDAttribute) и защищенные преобразования $.
@weekapaug нет, это логическое значение. и я совершенно потерял, почему вы так упорно делаете скриншот ..
также можете ли вы поделиться моделью propoffice
это ВСЕ, что есть в модели - пространство имен App \ models \ core; class propoffice extends \ App \ Model {protected $ primaryKey = 'officeID'; } Ого, это мне просто помогло
Если я сделаю officeID primaryKey, его ОЖИДАНИЕ будет целым числом. Мне нужно сделать его primaryKey, но не целым числом. Тем не менее, ваши вопросы мне помогли. Сделайте свой ответ так, что мой primaryKey в модели установлен в нецелочисленное поле, и скажите мне, как это сделать, и я могу принять ваш ответ !!
@weekapaug, чувак, если вы хотите сделать его первичным ключом с нецелым числом (вероятно, varchar), это не очень хорошая практика .. Я думаю, вам следует использовать для этого столбец integer - index - uqniue (я предполагаю, что вы хотите уникальный столбец для officeID) .. Если хотите, я могу так отредактировать свой ответ? И не забудьте также отредактировать свой квестон, потому что этот вопрос может помочь другим.
Я понимаю, что это плохая практика, и я, вероятно, заменю это поле на индекс по сравнению с первичным ключом и сделаю приращение идентификатора для первичного. Ваш основной ответ можно просто отредактировать, чтобы сообщить мне об этом, чтобы его не закопали в комментариях для кого-то еще. Это было связано с моделью laravel, которая по умолчанию ожидает, что primaryKey будет целым числом, тогда как ваш ответ предлагает синтаксис
Подскажите, правильно ли я понял, поле officeID находится в другой таблице? Значит, вы получаете это поле из функции в своей модели?