#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 для несуществующего задания, вот и все.