Laravel относится к попытке получить свойство не объекта

Итак, я пытаюсь использовать BelongsTo для отображения сведений о клиенте, вот мой текущий код:

мой контроллер:

$assignees = assignee::latest()
                                ->whereNull('timeout')
                                ->paginate(10);

         return view('assignees.index',compact('assignees'))
             ->with('i', (request()->input('page', 1) - 1) * 5);

Назначить стол:

$table->string('original_filename')->nullable();
$table->string('custidno')->nullable();
$table->foreign('custidno')->references('custid')->on('customers');
$table->string('cardno')->nullable();

Таблица клиентов:

Schema::create('customers', function (Blueprint $table) {
            $table->increments('id');
            $table->string('custid')->index()->unique();

Назначить модель:

public function cust()
{
    return $this->belongsTo('App\Customer','custid');
}

на мой взгляд: у меня есть следующий цикл for, который отображает «таблицу уполномоченных». Я хочу заменить поле custidno именем клиента, взятым из таблицы Customer.

index.blade.php:

<tr>
    <td>{{ $assignee->id }}</td>
    <td>{{ $assignee->datacenter }}</td>
    <td>{{ $assignee->cust->name}}</td>
    <td>{{ $assignee->refnumber }}</td>

Я получаю следующую ошибку:

Trying to get property of non-object

Попробуйте {{ $assignee->cust()->name }}

Miaan 19.02.2019 11:17

Могу ли я увидеть ваш поисковый запрос?

Kaushik Makwana 19.02.2019 11:20

вы должны указать «с» в своем запросе

Kaushik Makwana 19.02.2019 11:21

вероятно, ваше свойство cust возвращает значение null...! ты это проверял?

Soheil Rahmat 19.02.2019 11:23

@KaushikMakwana, я включил фрагмент из своего контроллера.

Abdul 19.02.2019 11:24

@SoheilRahmat, этого не должно быть, в правопреемнике-> custidno есть идентификационный номер.

Abdul 19.02.2019 11:24

<td>{{ isset($assignee->cust->name) ? $assignee->cust->name : '' }}</td>

Miaan 19.02.2019 11:29
dd($assignees) это массив или коллекция?
Iftikhar uddin 19.02.2019 11:32

попробуйте $assignees = assignee::latest() ->whereNull('timeout') ->paginate(10)->cust;

Kaushik Makwana 19.02.2019 11:44

пожалуйста, поделитесь своими обратными отношениями. в модели клиента

ahmednawazbutt 19.02.2019 13:39
Стоит ли изучать 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 и хотите разрабатывать...
0
10
239
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Существует большая вероятность того, что ваш запрос возвращает в нем значение null (нет записей). Теперь, когда вы пытаетесь получить доступ к его содержимому (которое ничего не значит), вы получаете сообщение об ошибке Попытка получить свойство не-объекта.

Лучше распечатать вывод, который вы получаете из запроса модели, а затем в своем коде проверить, есть ли какие-либо записи, прежде чем их обрабатывать. как показано ниже:

if ( count($assignee->cust) ){ // case there are some records against this assignee
    {{ $assignee->cust->name}}
}

еще лучший подход к отладке, чтобы сделать следующее, чтобы сначала увидеть вывод в контроллере.

echo '<pre>'; // to proper display your output
print_r($assignee); // your object with everything in it
exit; // exit application to see your variable output

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

Надеюсь, поможет :) Удачи

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

Abdul 19.02.2019 13:32

@Abdul, вы получаете NULL в таблице правопреемников или в отношениях с моделью клиента? попытаться получить записи, не разбивая их на страницы для понимания

ahmednawazbutt 19.02.2019 13:35

для этой строки <td>{{ $assignee->cust->name}}</td> есть вероятность, что идентификатор клиента-правопреемника равен нулю, поэтому, когда мы пытаемся получить доступ к имени клиента, возникает ошибка

ahmednawazbutt 19.02.2019 13:40

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

ahmednawazbutt 19.02.2019 13:41
Ответ принят как подходящий

В вашей Assign Модели:

public function cust()
{
    return $this->belongsTo('App\Customer','custid');
}

Вы используете custid, который находится внутри customers таблицы. Вам нужно указать custidno, который является ссылкой на внешний ключ custid в customers таблице.

Обновите его до:

public function cust()
{
    return $this->belongsTo('App\Customer','custidno', 'custid');
}

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

большое спасибо, что прояснили это! теперь он возвращает полное имя клиента :)

Abdul 19.02.2019 14:19

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