说明
我正在创建一个游戏,您可以在其中升级您的建筑物。点击任何建筑物后,它将通过upgradeBuilding()方法升级到更高级别。最有问题的部分是我必须升级将在$building
变量中的建筑物,它始终是一个带有建筑物名称的字符串。我认为$currentBuildingLevel->{$building}
导致错误。第二个问题是,每当我尝试var_dump($currentBuildingLevel)
它的装载时间很长,它不仅仅是一个具有建筑物等级的简单物体......
构建模型: 以下是应更新上述记录中的建筑物级别的代码:
$building = "barracks" // example building
public function upgradeBuilding($building)
{
$currentBuildingLevel = $this->first()->where("user_id", "=", Auth::id());
$currentBuildingLevel->{$building} = $currentBuildingLevel->{$building} + 1;
$currentBuildingLevel->save();
}
错误: 我收到错误:
Undefined property: Illuminate\Database\Eloquent\Builder::$barracks
问题: 如何正确执行此操作? $currentBuildingLevel
已成为模型的对象吗?
答案 0 :(得分:2)
您尝试访问Builder
上的媒体资源而非实际模型,因为您永远不会完成查询(使用first()
)。
您可以通过3个选项解决此问题。
将first()
电话移至结尾处:
$currentBuildingLevel = $this->where("user_id", "=", Auth::id())->first();
或者使用您正在处理的实例:
$this->{$building} += 1;
$this->save();
或者update your column在控制器中使用sql查询而不首先获取数据:
Building::where('user_id', Auth::id())->increment($building);