两个store()方法,一个不起作用(调用未定义的方法save())

时间:2017-04-14 13:53:02

标签: laravel laravel-5 eloquent

两种类似商店方法中的一种不起作用。你能为我澄清一下吗?

关系

  • 团队拥有多个用户<>用户属于团队
  • 用户有多个字符<>角色属于用户

工作代码(CharacterController)

public function store()
{
    $fighters = Fighter::pluck('name')->toArray();
    $this->validate(request(), [
        'name' => 'required|min:3|max:25|alpha_num|not_in:'.Rule::notIn($fighters).'unique:characters',
        'fighter' => 'required|in:'.Rule::in($fighters),
    ]);
    auth()->user()->characters()->save(new Character([
        'name' => request('name'),
        'fighter' => request('fighter'),
    ]));
    return redirect()->route('character.index');
}

不工作(TeamController)

public function store()
{
    $this->validate(request(), [
        'name' => 'required|min:3|max:25|alpha_num|unique:teams',
    ]);
    auth()->user()->team()->save(new Team([
        'name' => request('name'),
        'fame' => 0,
    ]));
    return redirect()->route('team.index');
}

问题

  1. 为什么同样的方法不可用?这是关系吗?
  2. 创建方法更好吗?我应该尝试使用吗?
  3. 以为我知道自己在做什么,现在事实证明我并不...... 谢谢你的帮助。

1 个答案:

答案 0 :(得分:2)

team()belongsTo关系,您可能在您的用户表中有一个team_id col,您希望与该团队关联。

public function store()
{
    $this->validate(request(), [
        'name' => 'required|min:3|max:25|alpha_num|unique:teams',
    ]);

    // create and save team
    $team = new Team([
        'name' => request('name'),
        'fame' => 0,
    ]);
    $team->save();

    // associate current authenticated user with team (set foreign key) and save user
    auth()->user()->team()->associate($team)->save();

    return redirect()->route('team.index');
}