【问题标题】:Laravel: Undefined property: Illuminate\Database\Eloquent\Relations\HasMany::$gameLaravel:未定义属性:Illuminate\Database\Eloquent\Relations\HasMany::$game
【发布时间】:2020-05-04 13:56:59
【问题描述】:

我正在使用 PHP 和 Laravel 制作游戏。现在我想存储一些记录,比如玩过的游戏、他们获得的胜利和失败。但是如何为已登录的用户保存这些记录?

我试过这个,但我得到了错误(帖子的标题);

    public function winGame() {
    if(isset(Auth::user()->email)) {
        $user = User::find(Auth::user()->id);

        $games = $user->statuses()->game;
        $gamesPlus = $games + 1;

        $wins = $user->statuses()->wins;
        $winsPlus = $wins + 1;

        $user->statuses()->save($gamesPlus, $winsPlus);
    }
}

而且我可能不会只使用模型名称的 DB:: 方法。

模型用户:

public function statuses()
{
    return $this->hasOne('App\Status');
}

模型状态:

public function user()
{
    return $this->belongsTo('App\User');
}

【问题讨论】:

  • status也有模型吗?
  • 您需要添加更多详细信息,例如定义关系的用户模型。描述其他实体及其与用户模型的关系。你想更新什么属性? btw $user = User::find(Auth::user()->id); 没用,将其更改为 $user = Auth::user(); 对于错误,您正在尝试通过关系访问查询构建器上的属性。
  • 既然是hasMany,你需要遍历不同的状态。或者将其更改为 hasOne 关系,在这种情况下,您只需修改现有记录即可使代码更容易。
  • 是的,状态有一个模型,我用 hasMany 代替 hasOne 但 hasOne 也不起作用。
  • () 检索数据库查询的查询构建器。删除它以获取单个记录/关系集合。

标签: php laravel model


【解决方案1】:

() on statuses 检索查询生成器,而不是记录。您可以通过执行此操作轻松清理代码以将各个行递增一。

public function winGame() {
    if(isset(Auth::user()->email)) {
        $user = Auth::user();

        $user->statuses->game++;
        $user->statuses->wins++;

        $user->statuses->save();
    }
}

或者,更具可读性,

public function winGame() {
    if(isset(Auth::user()->email)) {
        $status = Auth::user()->statuses;

        $status->game++;
        $status->wins++;

        $status->save();
    }
}

【讨论】:

  • 现在我得到这个错误:SQLSTATE[HY000]: 一般错误:1 no such column: game (SQL: update "statuses" set "wins" = 1, "game" = 1, "updated_at " = 2020-01-17 16:51:33 其中 "id" = 1)
  • 您需要查看您的状态表以了解它有哪些列以及应该更新哪些列。
  • 没关系,我必须用游戏代替游戏,谢谢!!
猜你喜欢
  • 2019-08-12
  • 2018-11-19
  • 2021-09-23
  • 2018-11-22
  • 1970-01-01
  • 2020-07-08
  • 2020-11-23
  • 2021-06-07
  • 2020-01-26
相关资源
最近更新 更多