您好,逐个回答您的问题:
问题1:
list($this->_xxModelName,$this->_xxModel) = \Yii::mapGet($this->_xxModelName);
,为什么要这样写,而不是直接通过use 引入model?
答:fecshop 希望用户可以在不修改源代码的前提下,可以修改任意功能,因此,如果使用use xxxxxx/Model,用户无法通过配置重写这个Model,因此,通过 \Yii::mapGet
函数,这个函数会去读取配置,是否存在重写,如果存在,则使用重写的,如果不存在,则使用当前赋值的,关于这个机制,详细参看:fecshop 重写机制, 该页面的 8.通过rewriteMap进行重写Block Model 层
使用起来会感觉有点绕,但这也是没办法的事,当你在本地开发的时候,可以直接引入 use xxxxxx/Model , 直接使用,因为你本地开发的程序,不是做库包,因此如果想修改,直接修改就好了
因此,你本地可以直接
use appadmin\local\local_models\mysqldb\Customer;
...
Customer::find()->where(array("id"=>$id))->all();
问题2:这个应该是查找配置表的一行的数据 现在查的问题,还可以仿造弄一弄。但是存的时候我发现:我用YII2原生的方法存就可以,如:
Yii::$app->db->createCommand()->insert('table_name', [
'msg' => $msg,
'customer_id' => $id,
'created_at' => $t,
])->execute();
答:肯定可以,使用使用php的原生sql都可以,使用yii2的ActiveRecord,维护以及代码可读性会更好,代码更精简。
另外,对于mysql,mongodb,不同类型的数据库,在使用AR的时候,很多操作几乎是一样的(当然也存在一定的差异)
问题3:ActiveRecord 保存后返回Id的问题
答: 插入数据后,id会保存到model的属性中,代码示例如下:
// 假设数据库是mysql ,主键为id。
function insert(){
$ob = new $this->_xxModelName;
$ob->email = 'xxxx',
$ob->first_name = 'xxx',
...
$ob->save();
return $ob->id;
}
返回的就是insert数据后的id