【问题标题】:Laravel save nested modelLaravel 保存嵌套模型
【发布时间】:2014-05-02 07:50:39
【问题描述】:

我正在使用 Laravel 4,但遇到了一个问题。

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

关系:

  • 用户属于ToMany('Project')
  • 项目属于ToMany('User')
  • 项目属于ToMany('Task')
  • 任务 belongsTo('Project')

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

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

使用该代码我得到:

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

【问题讨论】:

    标签: php laravel eloquent


    【解决方案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!';
    }
    

    【讨论】:

    • 快到了.. 现在我得到一个错误:完整性约束违规:1052 列 'id' in where 子句不明确(SQL: select * from projects inner join project_user on projects .id = project_user.project_id 其中project_user.user_id = 1 和id = 1 限制 1)
    • 也尝试改变Project/Task关系但没有效果。
    • SQL 错误是由 ->find($projectId) 引起的,但我不知道如何解决这个问题。
    • 试了几次,但我想我明白了。我更新了答案。
    • 谢谢。您编写的最后一个 sn-p 完成了这项工作,但是如何检查用户是否真正拥有该项目,以便用户只能将任务添加到他/她的项目中?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-23
    • 1970-01-01
    • 2014-07-20
    • 1970-01-01
    • 1970-01-01
    • 2017-02-02
    相关资源
    最近更新 更多