繁体   English   中英

Laravel 调用 eloquent 中未定义的方法 model

[英]Laravel Call to undefined method in eloquent model

我正在尝试将一个简单的表单存储到我的数据库中。 我的 model 是我的工作,每个工作可以包含多个任务。 因此我的模型看起来像这样:

用户

public function jobs()
{
    return $this->hasMany(Job::class);
}

工作

public function user()
{
    return $this->belongsTo(User::class);
}

public function tasks()
{
    return $this->hasMany(Task::class);
}

任务

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

当我现在想使用以下代码存储在 TaskController.php 中时:

    public function store(Request $request, Job $job)
    {
        $request['job_id'] = $job->id;
        $validated = $request->validate([
            'message' => 'required|string|max:255',
        ]);
 
        $request->user()->jobs()->tasks()->create($validated);
 
        return redirect(route('tasks.index'));
    }

我收到错误:

调用未定义的方法 Illuminate\Database\Eloquent\Relations\HasMany::tasks()

我很确定我在传递 $request 时犯了一个菜鸟错误,但无法弄清楚。 感谢您的任何帮助!

您的问题是您在jobs上调用tasks ,但jobs()是一种关系,而不是 model 也不是集合。

要修复它,您必须对每一个进行 go:

$request->user()
    ->jobs()
    ->each(function (Job $job) use ($validated) {
        $job->tasks()
            ->create($validated);
    });

或者,您可以尝试使用Has Many Through

调用关系 function ( $request->user()->jobs() ) 将得到关系 class ( Illuminate\Database\Eloquent\Relations\HasMany ),而不是集合本身。 $request->user()->jobs这样访问会让你得到工作集合。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM