Laravel保存嵌套模型

时间:2014-03-24 18:54:26

标签: php laravel eloquent

我正在使用Laravel 4并遇到问题。

我有3个模型:用户,项目,任务。

关系:

  • User belongsToMany('Project')
  • 项目belongsToMany('用户')
  • Project belongsToMany('Task')
  • 任务belongsTo('Project')

我想存储任务但没有运气。以下代码可能会更详细地说明我想要完成的任务:

Auth::user()->projects($projectId)->tasks()->save($task);

使用该代码我得到:

Call to undefined method Illuminate\Database\Query\Builder::tasks()

1 个答案:

答案 0 :(得分:1)

先保存您的任务。

然后你可以试试......

Auth::user()->projects()->find($projectID)->tasks()->associate($task);

您可能还需要修改项目/任务关系。 belongsToMany的倒数始终为belongsToMany。我想你可能需要hasManybelongsTo

编辑:

抱歉,我认为我引导你走错了方向,我终于开始工作了。

$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!';
}