Итак, я пытаюсь использовать 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
Могу ли я увидеть ваш поисковый запрос?
вы должны указать «с» в своем запросе
вероятно, ваше свойство cust возвращает значение null...! ты это проверял?
@KaushikMakwana, я включил фрагмент из своего контроллера.
@SoheilRahmat, этого не должно быть, в правопреемнике-> custidno есть идентификационный номер.
<td>{{ isset($assignee->cust->name) ? $assignee->cust->name : '' }}</td>
dd($assignees) это массив или коллекция?
попробуйте $assignees = assignee::latest() ->whereNull('timeout') ->paginate(10)->cust;
пожалуйста, поделитесь своими обратными отношениями. в модели клиента






Существует большая вероятность того, что ваш запрос возвращает в нем значение 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, вы получаете NULL в таблице правопреемников или в отношениях с моделью клиента? попытаться получить записи, не разбивая их на страницы для понимания
для этой строки <td>{{ $assignee->cust->name}}</td> есть вероятность, что идентификатор клиента-правопреемника равен нулю, поэтому, когда мы пытаемся получить доступ к имени клиента, возникает ошибка
вам может потребоваться обновить внешний ключ вашего отношения, чтобы он не был нулевым, чтобы убедиться, что есть запись против правопреемника
В вашей 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');
}
Это должно дать вам правильные записи, если они существуют. Затем вы можете проверить дальнейшую логику, если данные не равны нулю, а затем получить доступ к их свойству.
большое спасибо, что прояснили это! теперь он возвращает полное имя клиента :)
Попробуйте {{ $assignee->cust()->name }}