我正在使用Laravel 4并遇到问题。
我有3个模型:用户,项目,任务。
关系:
我想存储任务但没有运气。以下代码可能会更详细地说明我想要完成的任务:
Auth::user()->projects($projectId)->tasks()->save($task);
使用该代码我得到:
Call to undefined method Illuminate\Database\Query\Builder::tasks()
答案 0 :(得分:1)
先保存您的任务。
然后你可以试试......
Auth::user()->projects()->find($projectID)->tasks()->associate($task);
您可能还需要修改项目/任务关系。 belongsToMany
的倒数始终为belongsToMany
。我想你可能需要hasMany
和belongsTo
。
编辑:
抱歉,我认为我引导你走错了方向,我终于开始工作了。
$task = new Task;
$task->name = 'Some super ultra task';
Auth::user()->projects()->where('projects.id', $projectID)->first()->tasks()->save($task);
另外,我认为我比它需要的更难。
$project = Project::find($projectID);
$project->tasks()->save($task);
这应该完全一样。由于我们知道我们正在寻找的项目的ID,因此我们不应该首先通过用户模型。
要在保存之前检查用户是否拥有项目,您可以将此功能添加到Project
模型中。
public function ownedByUser($user_id)
{
if(User::find($user_id)->projects()->count()) {
return true;
} else {
return false;
}
}
然后你使用它,这就是我做的......
$project = Project::find($projectID);
if($project->ownedByUser(Auth::user()->id)) {
$project->tasks()->save($task);
} else {
echo 'This isn\'t your projec to edit, fool!';
}