swoft-cloud / swoft

🚀 PHP Microservice Full Coroutine Framework
https://swoft.org
Apache License 2.0
5.58k stars 788 forks source link

db update 时实体没有要更新的字段,getConnection() 返回null报错 #166

Closed jlzan1314 closed 6 years ago

jlzan1314 commented 6 years ago
Q A
Bug report? yes
Feature request? no
Swoft version 1.0.4-beta
Swoole version 2.1.1 (by php --ri swoole)
PHP version 7.1 (by php -v)
Runtime environment Docker

Details

/**
 * 数据库测试
 * @RequestMapping(route="db", method={RequestMethod::GET, RequestMethod::POST})
 */
public function db(){
    $userObj=User::findById(1)->getResult(User::class);
    $resultArray=$userObj->toArray();

    //update
    $userObj->setName("update");
    $userUpdateResult=$userObj->update()->getResult();

    $user = new User();
    $user->setName('clive2');
    $user->setSex(1);
    $user->setDesc('this my desc');
    $user->setAge(mt_rand(1, 100));
    $userSaveResult = $user->save()->getResult();

    $user->setId($userSaveResult);
    $deleteResult=$user ->delete()->getResult();

    return compact("resultArray",'userUpdateResult',"userSaveResult",'deleteResult','id');
}
// paste output here
{"msg":"Return value of Swoft\\Db\\QueryBuilder::getConnection() must be an instance of Swoft\\Db\\AbstractDbConnection, null returned","file":"\/var\/www\/swoft\/vendor\/swoft\/db\/src\/QueryBuilder.php","line":855,"code":0}

第一次访问的时候,可以update,第二次更新的时候会比较字段是否需要更新,如果不用更新的话,就会报错

解决方式就是 返回类型 加个?号,但是php 7.1 才支持nullable类型,你们看怎么处理吧.
    /**
     * @return \Swoft\Db\AbstractDbConnection
     */
    public function getConnection(): ?\Swoft\Db\AbstractDbConnection
    {
        return $this->connection;
    }
stelin commented 6 years ago

已经修复,db组件更新,不小于1.1.0