Данные взаимосвязи для просмотра — Laravel 5.2

#laravel #laravel-5.2

#laravel #laravel-5

Вопрос:

Возникла проблема с выводом данных взаимосвязи для просмотра. Сообщение об ошибке: «Пытаюсь получить свойство не-объектного представления».

Для пояснения все задачи зависят от задания. Итак, задача принадлежит заданию, а у задания много задач. У меня есть все взаимосвязи в моих моделях, и я тестирую это в Tinker, все работает.

На мой взгляд, я вывожу имя каждой задачи и название задания

   @foreach ($tasks as $task)
    <div class="list-item">
         <span class="item-name">{{ $task->job->name }}
         <span class="item-name">{{ $task->name}} </span>
     </div>
  @endforeach
  

Функция индексации моего TaskController:

 public function index(Request $request)
{
    $label = Label::all();
    $user = User::all();
    $task = Task::orderBy('duedate')->get();
    $team = Team::all();
    $customer = Customer::all();
    $status = Status::all();
    $job = Job::all();
    return view('tasks.index')->with([
        'tasks' => $task,
        'teams' => $team,
        'customers' => $customer,
        'labels' => $label,
        'users' => $user,
        'jobs' => $job,
        'statuses' => $status,
    ]);
}
  

Схема таблицы / выходные данные от tinker

  id: 1,
 assigned_user_id: 1,
 team_id: 4,
 name: "Label many to many ",
 duration: 2,
 created_at: "2016-06-16 14:50:57",
 updated_at: "2016-07-05 09:10:34",
 job_id: 1,
 duedate: "0000-00-00 00:00:00",
 status_id: 3,
 job: AppJob {#702
   id: 1,
   name: "quia",
   jobnumber: "8076",
   customer_id: 2,
   status_id: 0,
   created_at: null,
   updated_at: null,
 },
 user: null,
  

Взаимосвязи

** Модель задания **

 class Job extends Model
{
protected $fillable = ['name', 'jobnumber', 'customer_id', 'status_id'];

/**
 * Get all Task for Job
 */
public function task()
{
    return $this->hasMany(Task::class);
}
  

Модель задачи

 public function job()
{
    return $this->belongsTo(Job::class);
}
  

Надеюсь, вы сможете мне помочь, спасибо!

Комментарии:

1. Пожалуйста, поделитесь своей схемой таблицы и кодом взаимосвязи

2. Если a Job имеет кратные значения Task , то связь должна вызываться tasks , а не task . Это, вероятно, не решит проблему, хотя.

Ответ №1:

Со ссылкой на ваш ответ:

В базе ДАННЫХ некоторые записи задачи имели job_id для несуществующего задания

Вы можете использовать has метод для ограничения ваших результатов на основе существования взаимосвязи. см. документ для запроса отсутствия связи

 $task=Task::orderBy('duedate')->has('job')->get();
  

Ответ №2:

Такого рода ошибка возникает, когда вы пытаетесь напечатать значение модели, которое не существует. Попробуйте распечатать с помощью {{isset($task->job->name)?$task->job->name:'Task without Job'}} и проверьте, что он выводит.

Ответ №3:

Вы не загружаете связь «job» $task перед попыткой получить доступ к ее значениям :

 public function index(Request $request)
{
    $label = Label::all();
    $user = User::all();
    $task = Task::with('job')->orderBy('duedate')->get(); // loading the relationship
    $team = Team::all();
    $customer = Customer::all();
    $status = Status::all();
    $job = Job::all();
    return view('tasks.index')->with([
        'tasks' => $task,
        'teams' => $team,
        'customers' => $customer,
        'labels' => $label,
        'users' => $user,
        'jobs' => $job,
        'statuses' => $status,
    ]);
}
  

Комментарии:

1. Спасибо за ваш ответ.

2. Затем я получаю вызов неопределенного метода Illuminate Database Query Builder::jobs()

3. Спасибо, но при получении по-прежнему выдается ошибка «Пытаюсь получить свойство не-объекта». 🙁

4. «Исключение ErrorException в aae6d87ae7f8586ad5afa38cfe88fb5c0cdbb89f.php строка 18: Попытка получить свойство не-объекта (View: /Users…/resources/views/tasks/index.blade.php ) в aae6d87ae7f8586ad5afa38cfe88fb5c0cdbb89f.php строка 18 в CompilerEngine-> handleViewException(объект (ErrorException), ‘0’) в PhpEngine.php строка 44 …»

5. Пожалуйста, добавьте следующую ошибку и код в строке 18 в aae6d87ae7f8586ad5afa38cfe88fb5c0cdbb89f.php в свой OP.

Ответ №4:

Найдено решение.

В базе данных некоторые записи задачи имели job_id для несуществующего задания, вот и все.