要查看的关系数据 - Laravel 5.2

时间:2016-10-24 09:27:14

标签: laravel laravel-5.2

有问题要输出要查看的关系数据。 错误消息是:“尝试获取非对象视图的属性”。

作为解释,所有任务都依赖于工作。 所以任务属于Job和Job有很多任务。 我在模型中拥有所有关系并在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: App\Job {#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);
}

希望你能帮助我,谢谢!

4 个答案:

答案 0 :(得分:1)

参考你的回答:

  

在数据库中,某些任务条目的job_id为无现有作业

您可以使用has方法根据关系的存在来限制结果。请参阅querying relationship absence的文档

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

答案 1 :(得分:1)

当您尝试打印不存在的模型值时,会发生这种错误。尝试使用{{isset($task->job->name)?$task->job->name:'Task without Job'}}打印并检查输出内容。

答案 2 :(得分:0)

在尝试访问其值之前,您未在$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,
    ]);
}

答案 3 :(得分:0)

找到解决方案。

在DB中,一些Task条目有一个job_id到一个没有现有的Job,就是这样。