# Model数据模型 其实Model真没什么好讲的。他描述的是一个数据存储和获取的过程。 通过类型将数据分类,通过Model提供数据存储和访问的接口,通过Controller调用Model实现这些接口的复用,就这么简单。 # 使用协程 没错使用协程,不然通过回调的方法你会很蛋疼。 ```php public function testMysql() { try { $value = yield $this->mysql_pool->dbQueryBuilder->insert('MysqlTest') ->option('HIGH_PRIORITY') ->set('firstname', 'White') ->set('lastname', 'Cat') ->set('age', '25') ->set('townid', '10000')->coroutineSend()->dump(); return $value; }catch (\Exception $e){ return 1; } } ``` # yield的使用 特别重要!!!!!!!,很多人说怎么获取不到值,大多数是这里没注意。 首先在Model中通过协程访问就需要yield字段获取访问的值。如: ```php $value = yield $this->mysql_pool->dbQueryBuilder->insert('MysqlTest')... ``` 这里有个yield。 其次(非常重要!!) 在整个调用链中,如果访问了协程的Model都需要使用yield。如 ```php //这里是Controller调用TestModel中的testMysql方法 public function http_mysql() { $model = $this->loader->model('TestModel', $this); $result = yield $model->testMysql(); $this->http_output->end($result); } ``` TestModel中的testMysql方法中使用协程mysql,那么调用这个Model的testMysql前就必须有yield标示。 无论是Controller调用了TestModel的testMysql方法还是其他Model调用都必须拥有yield,无论多少层级,每层都需要使用yield。 # 贴士 有时候会遇到循环调用的问题,比如AModel调用了BModel,BModel调用了CModel,然后CModel又调用了AModel,不用担心会出现问题,框架通过策略解决了循环问题。在调用链中只会存在一个实例,比如上述的AModel其实只有一个。