我想用ActiveRecord
向表中添加记录。
下面是我的代码:
$model = new Article();
$model->title = 'test title';
$model->content = 'test content';
$model->category_id = 1;
$model->author_id = 1;
if ($model->validate()) {
$model->save();
}
$model->validate()
会传回true
,但$model->save()
会传回false
。
如何找到生成的$model->save()
的原始sql?
同时:$model->save()->rawSql
是null
,并且$model->getErrors()
返回空数组。
在调试中,所有查询都被记录,但我没有找到任何插入或更新查询。
2条答案
按热度按时间jjhzyzn01#
$model->save()->rawSql
调用无法返回null
,它必须引发异常,表明您正在尝试访问非对象的属性。$model->save()
返回boolean
值-查询执行成功与否。如果
$model->getErrors()
返回空数组,并且根本没有执行查询,我很确定模型事件处理程序有问题,尤其是beforeSave()
,请检查它,它不应该是return false
还要检查事件处理程序附加行为至于获取查询,如果只是没有执行它是没有用的,但是如果执行了,这里有一些方法可以实现它:
**1)**可能是最好的方法。使用调试面板。我在这里也提到过。
**2)**按照@robsch的建议查看日志。
你不能直接用
$model->save()
在代码中获取原始SQL,它将调用insert()
或update()
。如果你感兴趣,下面是insertInternal()
的部分代码:如果你调用
$command->rawSql
,你会得到原始的sql,但是你不能在外部这样做,因为命令是在内部形成的。这段代码
没有意义,因为
$model->save()
将在内部调用$model->validate()
。7cjasjjr2#
这段代码不会准确地显示原始sql,但您将获得预先绑定的查询和参数
结果如下所示: