您如何从 Laravel 5.5 中的数据透视模型访问相关数据?
How do you access related data from a pivot model in Laravel 5.5?
所以我有以下关系结构:
User
- UserTask
- Task
我的枢轴模型 (UserTask
) 需要从 Task
模型访问 属性。
所以我的 UserTask
模型中有一个访问函数,我需要在其中访问 Task->document_upload_required
属性.
有人知道我如何访问它吗?
注:
我无法在父模型中设置访问器,因为我需要使用在枢轴模型上设置的媒体功能。
我是这样定义关系的:
任务:
class Task extends Model
{
public function users()
{
return $this->belongsToMany(User::class, 'user_task')->using('App\Models\UserTask')->withPivot('completed');
}
}
用户任务:
class UserTask extends Pivot implements HasMedia
{
use HasMediaTrait;
public function getCompletedAttribute()
{
return "Need to access parent attribute here";
}
}
用户:
class User extends Authenticatable
{
use HasApiTokens, Notifiable, Billable;
public function tasks()
{
return $this->belongsToMany(Task::class);
}
}
更新:
这是我试图从中获取数据的数据中心 (UserTask
) table:
这是我的枢轴模型中的函数:
public function isComplete() {
if($this->task->document_upload_required) {
return $this->getMedia()->isEmpty() && $this->completed;
} else {
return $this->completed;
}
}
public function getCompletedAttribute()
{
return $this->isComplete();
}
以下是我打电话加入模特的方式:
$sections = $this->model->with(['subsections.tasks.users' => function($q){
$q->where('users.id', '=', Auth::id());
}])->where('parent', NULL)->doesntHave('assessments')->sorted()->get();
您需要先声明关系,然后访问其 属性,如下所示:
public function task()
{
return $this->belongsTo(Task::class);
}
public function getCompletedAttribute()
{
return $this->task->completed;
}
编辑:
$collection = $this->model->with(['subsections.tasks.users' => function($q){
$q->where('users.id', '=', Auth::id());
}])->where('parent', NULL)->doesntHave('assessments')->sorted()->get();
$collection->each(function($subsection) {
$subsection->tasks->each(function($task) {
$task->users->each(function($user) {
dump($user->pivot->completed);
});
});
});
dd();
所以我有以下关系结构:
User
- UserTask
- Task
我的枢轴模型 (UserTask
) 需要从 Task
模型访问 属性。
所以我的 UserTask
模型中有一个访问函数,我需要在其中访问 Task->document_upload_required
属性.
有人知道我如何访问它吗?
注:
我无法在父模型中设置访问器,因为我需要使用在枢轴模型上设置的媒体功能。
我是这样定义关系的:
任务:
class Task extends Model
{
public function users()
{
return $this->belongsToMany(User::class, 'user_task')->using('App\Models\UserTask')->withPivot('completed');
}
}
用户任务:
class UserTask extends Pivot implements HasMedia
{
use HasMediaTrait;
public function getCompletedAttribute()
{
return "Need to access parent attribute here";
}
}
用户:
class User extends Authenticatable
{
use HasApiTokens, Notifiable, Billable;
public function tasks()
{
return $this->belongsToMany(Task::class);
}
}
更新:
这是我试图从中获取数据的数据中心 (UserTask
) table:
这是我的枢轴模型中的函数:
public function isComplete() {
if($this->task->document_upload_required) {
return $this->getMedia()->isEmpty() && $this->completed;
} else {
return $this->completed;
}
}
public function getCompletedAttribute()
{
return $this->isComplete();
}
以下是我打电话加入模特的方式:
$sections = $this->model->with(['subsections.tasks.users' => function($q){
$q->where('users.id', '=', Auth::id());
}])->where('parent', NULL)->doesntHave('assessments')->sorted()->get();
您需要先声明关系,然后访问其 属性,如下所示:
public function task()
{
return $this->belongsTo(Task::class);
}
public function getCompletedAttribute()
{
return $this->task->completed;
}
编辑:
$collection = $this->model->with(['subsections.tasks.users' => function($q){
$q->where('users.id', '=', Auth::id());
}])->where('parent', NULL)->doesntHave('assessments')->sorted()->get();
$collection->each(function($subsection) {
$subsection->tasks->each(function($task) {
$task->users->each(function($user) {
dump($user->pivot->completed);
});
});
});
dd();