我有一个表Task
,其中有creatorID
和assignedTo
。它们都是我的User
表的主键u_id
的外键。我正在尝试显示creatorID
和assignedTo
的名称,但是它不起作用,它给出了错误Trying to get property 'name' of non-object
。有人能发现我的代码有什么问题吗?我愿意接受任何对我的模型/表的建议或修改,谢谢。
任务表(迁移)
Schema::create('tasks', function (Blueprint $table) {
$table->increments('t_id');
$table->string('t_name');
$table->date('start_date');
$table->date('end_date');
$table->string('status');
$table->unsignedInteger('creatorID');
$table->unsignedInteger('assignedTo')->nullable();
$table->unsignedInteger('p_id');
$table->foreign('creatorID')->references('u_id')->on('users');
$table->foreign('assignedTo')->references('u_id')->on('users');
$table->foreign('p_id')->references('p_id')->on('projects');
$table->string('priority');
$table->timestamps();
});
用户表(迁移)
Schema::create('users', function (Blueprint $table) {
$table->increments('u_id');
$table->string('name');
$table->string('email')->unique();
$table->string('password');
$table->rememberToken();
$table->string('status');
$table->string('picture');
$table->timestamps();
});
任务模型
public function users(){
return $this->belongsTo('App\User','u_id');
}
public function assignedTo(){
return $this->belongsTo('App\User','assignedTo');
}
用户模型
public function tasks(){
return $this->hasMany('App\Task','u_id');
}
public function assignedTo(){
return $this->hasMany('App\Task','assignedTo');
}
查询
$ActiveTasks = Task::where('p_id',$projectID)->where('status','active')->get();
刀片文件
@foreach($ActiveTasks as $task)
<p>{{$task->assignedTo->name}}</p> <<< NOT WORKING
@endforeach
答案 0 :(得分:0)
在您的Task
模型中,您可能需要更新assignedTo()
关系,以便它知道引用u_id
而不是id
:
public function assignedTo(){
return $this->belongsTo(\App\User::class, 'assignedTo', 'u_id');
}
来自docs:
如果您的父模型不使用id作为其主键,或者您希望 要将子模型加入其他列,您可以传递第三个 指定您父表的自定义的belongsTo方法的参数 键
此外,由于您的任务的assignedTo
列可为空,因此您可能希望查看定义关系时可以使用的withDefault()方法:
belongsTo关系允许您定义默认模型, 如果给定的关系为null,则将返回。这种模式是 通常称为Null Object模式,可以帮助删除 代码中的条件检查