在控制器方法中,我有以下代码:
$this->loadModel('Navigation');
$this->Navigation->updateAll(array('Navigation.name' => $this->request->data['Tag']['name']), array('Navigation.tag_id' => $this->request->data['Tag']['id']));
它产生以下错误:
Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column '
Germany' in 'field list'
SQL Query: UPDATE `dev_hub_subdb_v5_interface`.`navigations` AS
`Navigation` SET `Navigation`.`name` = Germany WHERE
`Navigation`.`tag_id` = 3
原因似乎是,当尝试将“德国”写入名为name
的列时,它并不将“德国”视为字符串。varchar(255)
是MySQL中的var_dump
字段。
但是,数据是字符串格式。如果我array(2) { ["Save"]=> string(6) "Update" ["Tag"]=> array(2) { ["id"]=> string(1) "3" ["name"]=> string(7) "Germany" } }
要保存的请求数据,我会得到:
updateAll
为什么这不起作用?根据{{3}} myApp.config(function($stateProvider, $urlRouterProvider, $controllerProvider) {
$stateProvider
.state('home', {
url : '/home',
templateUrl : 'login/home.html'
})
.state('dashboard',{
url : '/dashboard',
templateUrl : 'dashboard.html',
controller : 'DashboardCtrl',
resolve : {
loadPlugin : function($ocLazyLoad) {
return $ocLazyLoad
.load([
{
name : 'css',
insertBefore : '#app-level',
files : [
'../static/vendors/bower_components/nouislider/jquery.nouislider.css',
'../static/vendors/farbtastic/farbtastic.css',
'../static/vendors/bower_components/summernote/dist/summernote.css',
'../static/vendors/bower_components/eonasdan-bootstrap-datetimepicker/build/css/bootstrap-datetimepicker.min.css',
'../static/vendors/bower_components/chosen/chosen.min.css' ]
},
{
name : 'vendors',
files : [
'../static/vendors/input-mask/input-mask.min.js',
'../static/vendors/bower_components/nouislider/jquery.nouislider.min.js',
'../static/vendors/bower_components/moment/min/moment.min.js',
'../static/vendors/bower_components/eonasdan-bootstrap-datetimepicker/build/js/bootstrap-datetimepicker.min.js',
'../static/vendors/bower_components/summernote/dist/summernote.min.js',
'../static/vendors/fileinput/fileinput.min.js',
'../static/vendors/bower_components/chosen/chosen.jquery.js',
'../static/vendors/bower_components/angular-chosen-localytics/chosen.js',
'../static/vendors/bower_components/angular-farbtastic/angular-farbtastic.js' ]
},
{
name : 'myApp',
files : [ '../static/scripts/controller/DashboardController.js' ]
} ])
}
}
})
});
接受2个数组:要保存的数据和条件。所以我看不出怎么写这个。
答案 0 :(得分:0)
所以看起来你必须引用字符串,即使它们是字符串......
我上面提到的文档有一个相当差的解释/示例,但是说:
$fields
数组接受SQL表达式。应使用DboSource::value()
手动引用文字值。例如,如果您的某个模型方法正在调用updateAll()
,那么您将执行以下操作:
$db = $this->getDataSource();
$value = $db->value($value, 'string');
$this->updateAll(
array('Baker.status' => $value),
array('Baker.status' => 'old')
);
我不知道这个例子意味着什么,因为它们似乎是用字符串两次更新Baker.status
。像泥一样清楚!
无论如何,在我的情况下,在$this->request->data['Tag']['name']
附近添加引号修复它:
$this->Navigation->updateAll(array('name' => "'".$this->request->data['Tag']['name']."'"), array('tag_id' => $this->request->data['Tag']['id']));