Laravel / PHP отображает неправильный вывод для переменной

Используя 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

Подскажите, правильно ли я понял, поле officeID находится в другой таблице? Значит, вы получаете это поле из функции в своей модели?

Alvaro Alves 03.09.2018 22:09

Пожалуйста, покажите код для $officeList

Rwd 03.09.2018 22:10

Вопрос показывает точные данные, которые я ожидаю просмотреть или запросить значения. поле officeID преобразуется в ноль или 1, в то время как другое поле отображается, как ожидалось. Единственное отличие - это название поля. Итак, я сделал удар в темноте, что, возможно, из-за имени поля, существующего на другой таблице.

weekapaug 03.09.2018 22:19

Этот dd показывает $ officeList как модель, а не как коллекцию ...

Devon 03.09.2018 22:27

Да, это модель. В нем нет ничего, кроме ссылки на primaryKey и tablename. Никаких отношений на данный момент не установлено. Однако рассматриваемое поле действительно является именем поля в другом месте, и значения НЕ будут совпадать. Я чувствую, что это корень, но не знаю, как и где искать. Между массивом и выводом нет другого кода, поэтому он должен сводиться к некоторому процессу laravel / php, в котором я не участвую напрямую

weekapaug 03.09.2018 22:29

Зачем вам перебирать модель?

Devon 03.09.2018 22:37

$ the-> officeID; должен выдать ошибку. Вы уверены, что он покажет вам результат? в этом цикле вы должны попробовать, например, echo $the", $ the в виде строки

Teoman Tıngır 03.09.2018 22:38

почему вы использовали цикл для одного результата?

Alexander Villalobos 03.09.2018 22:41

Я получил результаты, запросив модель и перебрал ее. Опубликованные мной выходные данные просто показывают вам структуру и то, что я могу успешно с ней взаимодействовать, но имя поля officeID возвращает 0 вместо значения, которое я вижу в структуре.

weekapaug 03.09.2018 22:42

Вы, ребята, упускаете суть вопроса. Я не просматриваю модель или один результат. Мой вопрос связан с тем, почему моя переменная возвращается как ноль или 1 вместо того, что я вижу в результатах? Я могу отлично просмотреть результаты и показать все, но ОДНО поле преобразуется в ноль или единицу вместо того, что я на самом деле вижу в результатах.

weekapaug 03.09.2018 22:44

Что ж, ваш вопрос должен быть воспроизведен, чтобы мы могли даже начать понимать, почему это так, но сейчас похоже, что вы либо представили неверный псевдокод, либо не обращаетесь к данным должным образом.

Devon 03.09.2018 22:46

@weekapaug, пожалуйста, проверьте мой ответ

Teoman Tıngır 03.09.2018 22:50

Считайте, что все поля отображаются нормально при циклическом просмотре. Они ВСЕ выводят в точности так, как я вижу в дампе, но по какой-то неизвестной причине это ОДНО поле отображается как НУЛЬ или 1, несмотря на то, что я вижу реальное значение перед выводом.

weekapaug 03.09.2018 22:52

вы показываете их с echo $the->officeID; в цикле?

Teoman Tıngır 03.09.2018 22:53

Да, в вашем сценарии подумайте об этом. Когда я использую $ the-> officeID, я вижу 0, несмотря на то, что данные показывают 123. Если я использую $ the-> xOfficeID, я вижу 123, как и должно быть. Итак, это поле officeID по какой-то причине получает особую обработку, и это то, что я пытаюсь понять.

weekapaug 03.09.2018 22:56

Тогда @weekapaug создаст лучший mcve. Это просто конкретная модель, возвращающая 0 для officeID или для всех? Раньше у вас был officeID из другой таблицы, а теперь он исчез, а ваш dd показывает другое, поэтому в вашем вопросе было много запутанной / противоречивой информации.

Devon 03.09.2018 23:01

Можете ли вы узнать об атрибутах вашей модели? потому что это очень странно ... во-первых, все `echo $ the-> officeID;` должны выдавать ошибку -_-

Teoman Tıngır 03.09.2018 23:02

0 значит может быть ложным? Но все равно не имеет смысла, он все равно должен выдавать ошибку

Teoman Tıngır 03.09.2018 23:05

Я думал, что он, возможно, тоже возвращает логическое значение вместо фактического значения, но все поля заполнены, поэтому это не относится к этому. Если это логическое значение, я понятия не имею, против чего он проверяет, или почему он просто не выплевывает именно то, что он показывает, как и для других полей. Возможно, он пытается подключиться к другой таблице с этим officeID, но у меня нигде нет ссылки на него. Есть ли ограничение не использовать ключ, который существует в другой несвязанной таблице?

weekapaug 03.09.2018 23:10

Я так и думал .. можно скрин модели сделать? Очень хочу увидеть своими глазами.

Teoman Tıngır 03.09.2018 23:12

Я добавил свой запрос в начало вопроса, но на скриншоте больше ничего нет, кроме экрана, на котором будет отображаться 0 там, где вы ожидаете увидеть 123

weekapaug 03.09.2018 23:22
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
21
77
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы получаете 0, потому что существует конфликт между вашей моделью и вашей таблицей.

в вашей модели вы устанавливаете officeID в качестве первичного ключа, но в вашей таблице это столбец varchar. Модели ожидают, что столбец primaryKey будет целым числом.

Это дает вам ошибку. Так что вам следует либо

  1. Удалите строку protected $ primaryKey = 'officeID' в вашей модели propoffice

  2. Сделайте поле целым числом, если вам нужно, чтобы оно было первичным ключом.

  3. Выясните, как сделать ваш первичный ключ varchar. (плохая практика).

У меня нет проблем с выводом. У меня проблемы с тем, что результат соответствует тому, что на самом деле показывают результаты. В приведенном выше примере мои результаты говорят, что officeID = 0, независимо от того, что результаты показывают 123. Однако я вижу правильные данные для других имен полей.

weekapaug 03.09.2018 22:58

Вот странная часть. Если я вставлю dd ($ the) в начало цикла, я увижу, чего ожидать, и это правильно. Если я вставлю dd ($ the-> officeID), он будет отображаться как ноль. Итак, что-то меняется во время $ the-> officeID, чего не происходит во время dd ($ the); какой процесс будет активировать это поведение?

weekapaug 03.09.2018 23:37

что-то меняется, потому что - я предполагаю, что - $ the-> officeID имеет значение false (0) - на самом деле я должен выдать ошибку, кстати -. @ weekapaug вы можете попробовать с var_dump($the->officeID); и поделиться со мной результатом?

Teoman Tıngır 03.09.2018 23:44

Теперь я вижу это ... int (0) 0. Но это не целое число, если это то, что означает int (0). Это может помочь ... что-то где-то по какой-то причине ожидает целое число? Есть некоторые идентификаторы, которые являются целыми числами, и те, которые отображаются. Теперь, чтобы понять, какая часть процесса заставляет его вообще ожидать чего-то особенного?

weekapaug 03.09.2018 23:46

Насколько я помню, красноречивые атрибуты модели могут изменять свое значение: отношения, вспомогательные элементы (getOfficeIDAttribute) и защищенные преобразования $.

Jorge Rodríguez 03.09.2018 23:53

@weekapaug нет, это логическое значение. и я совершенно потерял, почему вы так упорно делаете скриншот ..

Teoman Tıngır 03.09.2018 23:54

также можете ли вы поделиться моделью propoffice

Teoman Tıngır 03.09.2018 23:56

это ВСЕ, что есть в модели - пространство имен App \ models \ core; class propoffice extends \ App \ Model {protected $ primaryKey = 'officeID'; } Ого, это мне просто помогло

weekapaug 03.09.2018 23:58

Если я сделаю officeID primaryKey, его ОЖИДАНИЕ будет целым числом. Мне нужно сделать его primaryKey, но не целым числом. Тем не менее, ваши вопросы мне помогли. Сделайте свой ответ так, что мой primaryKey в модели установлен в нецелочисленное поле, и скажите мне, как это сделать, и я могу принять ваш ответ !!

weekapaug 04.09.2018 00:01

@weekapaug, чувак, если вы хотите сделать его первичным ключом с нецелым числом (вероятно, varchar), это не очень хорошая практика .. Я думаю, вам следует использовать для этого столбец integer - index - uqniue (я предполагаю, что вы хотите уникальный столбец для officeID) .. Если хотите, я могу так отредактировать свой ответ? И не забудьте также отредактировать свой квестон, потому что этот вопрос может помочь другим.

Teoman Tıngır 04.09.2018 00:13

Я понимаю, что это плохая практика, и я, вероятно, заменю это поле на индекс по сравнению с первичным ключом и сделаю приращение идентификатора для первичного. Ваш основной ответ можно просто отредактировать, чтобы сообщить мне об этом, чтобы его не закопали в комментариях для кого-то еще. Это было связано с моделью laravel, которая по умолчанию ожидает, что primaryKey будет целым числом, тогда как ваш ответ предлагает синтаксис

weekapaug 04.09.2018 00:18

Другие вопросы по теме