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

标签 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. 创建方法更好吗?我应该尝试使用它吗?

我以为我知道自己在做什么,现在看来我不知道... 感谢您的帮助。

最佳答案

team() 是一个 belongsTo 关系,您的用户表中可能有一个 team_id 列,您希望将其与团队关联。

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');
}

关于laravel - 两个 store() 方法,其中一个不起作用(调用未定义的方法 save()),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43412973/

相关文章:

php - 如何检查某物是否可数?

php - Laravel模型递归抑制无限循环

mysql - 针对另外两个表选择一个表中缺少的行?

Laravel 5.5 类型错误:传递给 Illuminate\Auth\EloquentUserProvider::validateCredentials() 的参数 1 必须是一个实例

php - Laravel 5.2-调用未定义的方法 Illuminate\Support\Facades\Response::header()

javascript - ajax 不调用 Controller 函数 laravel

laravel - 使用 whereHas 或其他类型的查询重构 3 个父子类别关系查询?

unit-testing - Laravel:将测试组织到文件夹中并运行它们

php - 在 laravel 5.2 中为特定路由禁用 web 中间件

php - laravel 5 将日期和时间插入数据库