Laravel 5.1更新查询未改变值

4

晚上好,

我遇到了一个查询更新的问题,它没有返回错误,但也没有更新定义字段用户的值。我尝试删除foreach并将特定元素添加到查询中,如下所示,但这也没有影响字段结果。

$UserUpdate = DB::table('users')->where('id', '=', 3)->update(array('StockAcc' => 6));

控制器

 namespace App\Http\Controllers;
use \View as View;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Auth;
use Illuminate\HTTP\Request;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
class TransController extends BaseController
{
    public function Trans(Request $Return)
    {

        $id = $Return->input('id');
        $uid = $Return->input('uid');
        $Math = $Return->input('Math');
        $Pin = $Return->input('Pin');
        $Buy = $Return->input('Buy');
        $Sell = $Return->input('Sell');
        /*
         * Querys for DB results
         */

        $User = DB::Table('users')->where('id', $uid);
        foreach ($User as $item) {
            $Final = $Buy * $Math;
                    $NewMoney = $Final - $item->StockAcc;
                    $UserUpdate = DB::table('users')
                        ->where('id', '=', $uid)
                        ->update(array('StockAcc' => $NewMoney));

        }
    }
}

路由

 Route::get('/Display', array(
        'middleware' => 'auth',
        'uses' => 'StockController@Display'
    ));

    Route::post('/test', function(){

    });

视图:

{!!Form::open(array('action' => 'TransController@Trans', 'url' => ' '))!!}

3
提示:不要为变量使用大写字母。 - Ozan Kurt
我认为这是因为当像App\User::where('id', $uid)->update(['StockAcc' => $NewMoney]);这样访问时,应该在_model_上使用update方法,但由于您正在使用DB模型进行查找,所以我不认为它会起作用。尝试按照我上面展示的方式进行更新...您还需要包括use App\User(如果需要更改则更改)。 - camelCase
1
@驼峰命名法相关的用户名 :P - Jeff
1
@CharlieBilbo 我只是在评论大写字母的问题。当您没有与该表相关联的模型时,您应该只使用DB类。请查看如何使用Eloquent进行插入/更新/删除:https://laravel.com/docs/5.0/eloquent#insert-update-delete。更加清晰和容易执行`User :: find(3)-> update(['StockAcc' => 6])`。 - Jeff
1
请注意,为了使update方法生效,您必须在模型中设置$guarded$fillable之一。默认情况下,它受到批量更新的保护。 - camelCase
显示剩余2条评论
1个回答

1
你应该使用User模型而不是调用DB::table('users')。然后,如果你在模型中添加protected $guarded = [];,你应该能够顺利更新。
在你的代码中,你可以将DB::table('users')->where('id', '=', $uid)...更改为User::where('id', '=', $uid)...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接