Ошибка Laravel и блейда до сих пор не решена

Я просто хотел показать изображение

<img src="{!!DB::table('users')->where('username',$game->initiator)->first()->photo_path!!}" alt="" />

но я получаю сообщение об ошибке

Trying to get property of non-object 

Я перепробовал все методы, такие как удаление скобок, кавычек и использование Html::image, но лекарство не было найдено.

Но когда я меняю свой код на

{!!dd(DB::table('users')->where('username',$game->initiator)->first()->photo_path)!!}

or

{{dd(DB::table('users')->where('username',$game->initiator)->first()->photo_path)}}

Я получаю URL-адрес gravatar, который установлен в базе данных, и этот URL-адрес имеет двойные кавычки, например: - "http://www.gravatar.com/avatar/5478144dd02f370affc2ad70f22af697?s=200&r=pg&d=identicon"

что означает, что ссылка существует в базе данных, но почему появляется ошибка. Я попытался

<img src="{!!url(DB::table('users')->where('username',$game->initiator)->first()->photo_path)!!}" alt="" />

но это тоже не сработало для меня.

Также, когда я просто заменяю $game->initiator именем пользователя, изображение отображается правильно. Те, кто думает, что переменная $game->initiator пуста, ошибаются. Я использовал функцию dd(), чтобы увидеть, пуста она или нет, а затем обнаружил, что она содержит данные пользователя.

Я не могу сделать это в контроллере, потому что у меня более 1000 игр, и у всех есть инициатор и акцептор, изображения которых должны отображаться.

РЕДАКТИРОВАТЬ: Когда я добавляю {{dd($game)}} после изображения, оно сработало и подавило ошибку, но ошибка по-прежнему доступна для просмотра из источника html. Похоже,

<script> Sfdump = window.Sfdump || (function (doc) { var refStyle = doc.createElement('style'), rxEsc = /([.*+?^${}()|\[\]\/\\])/g, idRx = /\bsf-dump-\d+-ref[012]\w+\b/, keyHint = 0 <= navigator.platform.toUpperCase().indexOf('MAC') ? 'Cmd' : 'Ctrl', addEventListener = function (e, n, cb) { e.addEventListener(n, cb, false); }; (doc.documentElement.firstElementChild || doc.documentElement.children[0]).appendChild(refStyle); if (!doc.addEventListener) { addEventListener = function (element, eventName, callback) { element.attachEvent('on' + eventName, function (e) { e.preventDefault = function () {e.returnValue = false;}; e.target = e.srcElement; callback(e); }); }; } function toggle(a, recursive) { var s = a.nextSibling || {}, oldClass = s.className, arrow, newClass; if ('sf-dump-compact' == oldClass) { arrow = '&#9660;'; newClass = 'sf-dump-expanded'; } else if ('sf-dump-expanded' == oldClass) { arrow = '&#9654;'; newClass = 'sf-dump-compact'; } else { return false; } a.lastChild.innerHTML = arrow; s.className = newClass; if (recursive) { try { a = s.querySelectorAll('.'+oldClass); for (s = 0; s < a.length; ++s) { if (a[s].className !== newClass) { a[s].className = newClass; a[s].previousSibling.lastChild.innerHTML = arrow; } } } catch (e) { } } return true; }; return function (root) { root = doc.getElementById(root); function a(e, f) { addEventListener(root, e, function (e) { if ('A' == e.target.tagName) { f(e.target, e); } else if ('A' == e.target.parentNode.tagName) { f(e.target.parentNode, e); } }); }; function isCtrlKey(e) { return e.ctrlKey || e.metaKey; } addEventListener(root, 'mouseover', function (e) { if ('' != refStyle.innerHTML) { refStyle.innerHTML = ''; } }); a('mouseover', function (a) { if (a = idRx.exec(a.className)) { try { refStyle.innerHTML = 'pre.sf-dump .'+a[0]+'{background-color: #B729D9; color: #FFF !important; border-radius: 2px}'; } catch (e) { } } }); a('click', function (a, e) { if (/\bsf-dump-toggle\b/.test(a.className)) { e.preventDefault(); if (!toggle(a, isCtrlKey(e))) { var r = doc.getElementById(a.getAttribute('href').substr(1)), s = r.previousSibling, f = r.parentNode, t = a.parentNode; t.replaceChild(r, a); f.replaceChild(a, s); t.insertBefore(s, r); f = f.firstChild.nodeValue.match(indentRx); t = t.firstChild.nodeValue.match(indentRx); if (f && t && f[0] !== t[0]) { r.innerHTML = r.innerHTML.replace(new RegExp('^'+f[0].replace(rxEsc, '\\$1'), 'mg'), t[0]); } if ('sf-dump-compact' == r.className) { toggle(s, isCtrlKey(e)); } } if (doc.getSelection) { try { doc.getSelection().removeAllRanges(); } catch (e) { doc.getSelection().empty(); } } else { doc.selection.empty(); } } }); var indentRx = new RegExp('^('+(root.getAttribute('data-indent-pad') || ' ').replace(rxEsc, '\\$1')+')+', 'm'), elt = root.getElementsByTagName('A'), len = elt.length, i = 0, t = []; while (i < len) t.push(elt[i++]); elt = root.getElementsByTagName('SAMP'); len = elt.length; i = 0; while (i < len) t.push(elt[i++]); root = t; len = t.length; i = t = 0; while (i < len) { elt = root[i]; if ("SAMP" == elt.tagName) { elt.className = "sf-dump-expanded"; a = elt.previousSibling || {}; if ('A' != a.tagName) { a = doc.createElement('A'); a.className = 'sf-dump-ref'; elt.parentNode.insertBefore(a, elt); } else { a.innerHTML += ' '; } a.title = (a.title ? a.title+'\n[' : '[')+keyHint+'+click] Expand all children'; a.innerHTML += '<span>&#9660;</span>'; a.className += ' sf-dump-toggle'; if ('sf-dump' != elt.parentNode.className) { toggle(a); } } else if ("sf-dump-ref" == elt.className && (a = elt.getAttribute('href'))) { a = a.substr(1); elt.className += ' '+a; if (/[\[{]$/.test(elt.previousSibling.nodeValue)) { a = a != elt.nextSibling.id && doc.getElementById(a); try { t = a.nextSibling; elt.appendChild(a); t.parentNode.insertBefore(a, t); if (/^[@#]/.test(elt.innerHTML)) { elt.innerHTML += ' <span>&#9654;</span>'; } else { elt.innerHTML = '<span>&#9654;</span>'; elt.className = 'sf-dump-ref'; } elt.className += ' sf-dump-toggle'; } catch (e) { if ('&' == elt.innerHTML.charAt(0)) { elt.innerHTML = '&hellip;'; elt.className = 'sf-dump-ref'; } } } } ++i; } }; })(document); </script>

person Yash Lotan    schedule 24.04.2016    source источник
comment
Ошибка не в этой строке, а где-то еще в вашем представлении, проверьте трассировку стека и получите номер строки.   -  person The Alpha    schedule 24.04.2016


Ответы (4)


Сообщение об ошибке говорит вам, что именно не так: вы пытаетесь получить свойство, не являющееся объектом.

Поскольку вы создаете цепочку методов (DB::table('users')->where('username',$game->initiator)->first()->photo_path), трудно увидеть точно, в чем проблема, поэтому вам нужно пройти через каждый вызов метода и выяснить, где он дает сбой (он вернет null, а не объект).

Итак, в вашем коде начните пошагово выполнять методы…

dd(DB::table('users'));
dd(DB::table('users')->where('username', $game->initiator));

…и так далее, пока не выяснится, какой метод возвращает null, а не объект.

person Martin Bean    schedule 24.04.2016
comment
Когда я использую dd, ошибки не возникает, но если не использовать dd, возникает ошибка, и я не могу использовать dd в источнике изображения - person Yash Lotan; 24.04.2016
comment
При простом использовании {{dd(DB::table('users')->where('username',$game->initiator)->first()->photo_path)}} я не получаю ошибок - person Yash Lotan; 24.04.2016

Фасады должны жить в глобальном пространстве имен. Попробуй использовать:

{{ \DB::table('users')->where('username', $game->initiator)->first()->photo_path }}

Если это не так, ваш псевдоним не зарегистрирован должным образом. Проверьте config/app.php > aliases и убедитесь, что там указан БД.

person Dan H    schedule 24.04.2016
comment
Я проверил свой config/app.php и обнаружил, что там указана БД, и использование `` тоже не помогает - person Yash Lotan; 24.04.2016
comment
и если бы DB не было указано в псевдонимах, как бы работала команда dd, содержащая запрос? - person Yash Lotan; 24.04.2016

Настоящая проблема возникла из-за того, что я внес некоторые изменения в таблицу пользователей. Я изменил тип данных balance с string на bigint, и после этого изменения я получил вышеуказанные ошибки.

Вы также должны проверить, случилось ли это с вами.

Решение. Вам следует изменить столбец из файла миграции, создать другую базу данных или сбросить значения в этой таблице.

В моем случае я изменил базу данных.

person Yash Lotan    schedule 24.04.2016

У меня была аналогичная проблема. с БД вы получаете доступ к записи в базе данных, но это не экземпляр модели. Попробуйте получить доступ к данным по модели, в вашем случае просто используйте \App\User::where(.... и посмотрите, возникает ли ошибка.

person Peter    schedule 24.04.2016