我开始说是的,我看过这个,不,没有其他人的修复似乎对我有用......
所以我有一个player
模型,我想更新特定字段。我提交了一个ajax请求,并让它更新相关字段。
此模型使用自定义主键。
玩家模型
class Player extends Model
{
// Settings
protected $primaryKey = 'playerid';
protected $connection = 'mysql_game';
protected $table = "players";
public $timestamps = false;
// Various casting and accessor/mutator stuff
// Various relationships
}
该表格如下:
https://puu.sh/zXh3Y/dd75b2e0d9.png
加上“访问”#39;字段TEXT
现在......在我的控制器中(是的,我在控制器atm中获得了逻辑,我将在以后提取它)...它是一个补丁路由,它接受一个动作作为请求之一投入。它会切换这些输入,然后根据提供的操作更新相关部分。
无论如何......这里的问题仅适用于其中一项行动。其他人都没有这个问题,即使保存代码本身是相同的。在切换任何操作之前,播放器会在控制器的开头被抓取,因此播放器对象对于工作和不工作的开关都是相同的。
控制器(仅限部分)
public function update(Request $request)
{
$output = [
'status' => 'failure',
'message' => 'Nothing happened',
'data' => null
];
if (!$request->has(['id','action','data'])){
$output['message'] = "Missing input parameters!";
return $output;
}
$data= $request->get('data');
$id= $request->get('id');
$player = Player::find($player);
if (is_null($player)){
$output['message'] = "Could not find player";
return $output;
}
switch($request->get('action')){
// various switch actions in here
}
$player->access
数组的布局是:
[ ['keyname',0], ['keyname2',0], ['keyname3',1], ... ]
基本上是一个数组数组,每个子数组包含值名称和1/0(真/假)值。在访问时,Player模型将其转换为数组。
case "faction.access": {
$access= $player->access;
$key = null;
foreach ($access as $i=>$item){
if ($item[0] === $data){
$key = $i;
}
}
$newValue = 0;
if ($access[$key][1] === 0){
$newValue = 1;
}
$log = new LogCreator();
$log->setTarget($player->playerid)->setAction('access-'.$value)->setOld($access[$key][1])->setNew($newValue)->save();
$access[$key][1] = $newValue;
$player->access = $access;
try {
$player->save();
$this->breakPlayerCache($player->playerid);
$output['status'] = 'success';
$output['data'] = $access;
} catch (\Exception $e){
$output['message'] = 'An error occurred when saving.';
}
break;
}
现在,我获得了成功'我的前端上的消息,以及传回的数据是正确的...但是,当我检查数据库时,没有保存任何内容。当我使用Barryvdh的Debugbar输出值时,我还可以看到$ access变量已经正确更新,但是$ player对象实际上没有保存这些值。
我已经在artisan tinker
尝试了同样的结果。 save()返回true。
我在网上发现的其他大多数事情都是关于要么没有指定自定义主键(我已经完成),要么是大写/小写问题(我的所有东西都是小写的)。所以我完全难过......任何帮助都会非常感激。
(在Laracasts上转发:https://laracasts.com/discuss/channels/eloquent/save-returns-true-yet-does-not-update)
答案 0 :(得分:0)
我认为问题可能出在您的模型上。
您可能需要声明protected $fillable
数组:
示例:
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
...
'access'
...
];