我的调试值设置为2,它显示所有查询,除了我需要的查询.
我有一个Items控制器方法,在User模型中调用此方法(Item belongsTo User):
function add_basic($email, $password) {
$this->create();
$this->set(array(
'email' => $email,
'password' => $password
));
if($this->save()) {
return $this->id;
}
else {
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
我已经确认$email并且$password正在正确地传递给函数(并且填充了合法数据).email并且password是User模型中字段的名称.
我还确认$this->save()它正在返回false,但是当我查看发生这种情况的页面时,查询没有在调试中打印,并且没有抛出错误,所以我不知道什么是错误的.
关于如何查看错误或者为什么查询似乎没有被执行的任何想法?
这很奇怪,因为在此之后,我有另一个模型以完全相同的方式保存数据,它顺利出现.
使用saveAll()在CakePHP中保存多个记录,我能够将它们成功保存在表中.但是在检索那些已保存行的ID时会出现问题.LastInsertID()这里只返回一个最后一个ID.如何获取我插入的所有最后插入的ID saveAll()?
我有一个注册表,用户可以在其中填写两个电子邮件地址(email1和email2).市场营销的要求是它们必须是唯一的(如果我们有10个用户,那么就会有10*2 = 20个唯一的电子邮件地址).
该系统已经基于cakephp构建,所以我想知道的是,有什么类似于isUnique功能(在一个字段中是唯一的)可以直接执行此操作吗?或者我注定要自己编码?提前致谢.
编辑:建立在理查德的例子,这对我有用:
function checkUnique($data, $fields) {
if (!is_array($fields)) {
$fields = array($fields);
}
foreach($data as $key) {
$checks = $key;
}
if (empty($checks)) {
return true; //allow null
}
foreach($fields as $key) {
$tmp[$key] = $checks;
}
if (isset($this->data[$this->name][$this->primaryKey])) {
$tmp[$this->primaryKey] = "<>".$this->data[$this->name][$this->primaryKey];
}
return $this->isUnique($tmp);
}
Run Code Online (Sandbox Code Playgroud) 我意识到这些可能不一定是一个巨大的性能问题,但我想摆脱SHOW FULL COLUMNS FROMCake生成的任何不必要的查询.我已经尝试使用Containable行为,我认为这会阻止Cake查看我没有包含在我的任何关联find(),但我仍然SHOW FULL COLUMNS FROM在我的SQL转储中看到查询.我也尝试过unbindModel(),但没有效果.
我不是专家,也不了解蛋糕的所有复杂性,所以在这里的任何帮助将不胜感激!
我有一个非常简单的应用程序,有1个表,每行包含一个单词,它的定义和一个例子.
定义和示例字段是varchars(5000).
在每个页面上,我都有一个显示单词列表的侧边栏.在一定数量的单词后,我开始收到以下错误:
Error: Allowed memory size of 33554432 bytes exhausted
Run Code Online (Sandbox Code Playgroud)
控制器中的代码,用于设置Element中使用的变量:
$this->set('allWords', $this->Word->find('all', array('order' => array('Word.text ASC'))));
Run Code Online (Sandbox Code Playgroud)
我怀疑find方法读入所有行数据,包括定义和示例,此时我真的不需要,这会导致错误.
有没有办法只读取id和单词,而不是每行的定义和示例值?
更新
在我的元素内部,我遍历$ allWords数组,打印出每个单词以及一个链接:
echo '<h3>Words ('.count($allWords).')</h3>';
echo $this->Html->link('Add new', array('controller' => 'words', 'action' => 'add'));
echo '<br/><br/>';
foreach($allWords as $thisWord)
{
echo $this->Html->link($thisWord['Word']['text'], array('controller' => 'words', 'action' => 'edit', $thisWord['Word']['id']));
if( ($thisWord['Word']['example'] == '') || ($thisWord['Word']['definition'] == '') )
{
echo ' ' . $this->Html->image('warning.png');
}
echo '<br \>';
}
Run Code Online (Sandbox Code Playgroud)
看来如果我注释掉foreach循环的内部部分,我就不会得到内存错误.
这种情况下的SQL输出是:
SELECT `Word`.`id` FROM `idioms`.`words` AS `Word` WHERE 1 = …Run Code Online (Sandbox Code Playgroud) 我是cakephp的新手.我想知道在cakephp中是否可以使用单个事务处理多个模型提交和回滚.我想做这样的事情
<?php
function add(){
$transaction = begintransaction;
if(model1->save()){
if(model2->save()){
if(model3->save(){
}
else{
$errorFlag['model3'] = "Error in model 3";
}
}
else{
$errorFlag['model2'] = "Error in model 2";
}
}
else{
$errorFlag['model3'] = "Error in model 3";
}
if(empty($errorFlag)){ //no error in saving the model
$transaction->commit();
$this->Session->setFlash(__('The form data with multiple model is saved', true));
}
else{ //error in saving the model
$transaction->rollback();
$this->Session->setFlash(__('The form data with multiple model is saved', true));
}
}
?>
Run Code Online (Sandbox Code Playgroud) 我正在编写一个支持多个测量单位的应用程序.在极少数情况下,用户想要更改他们的测量系统,我需要运行一个查询,该查询应用乘数来将应用程序中的每个单位列缩放到正确的测量系统.为了确保在此操作出错的情况下所有数据都保持正常,我需要在事务中运行查询.
Cake中是否可以执行包含多个模型查询的事务?
到目前为止我发现的只是DataSource :: begin/commit/rollback(),但它只支持针对单个模型的查询.
好吧,我看了看,但似乎无法在任何地方找到任何东西.我有一个精美分页的结果显示,但它们目前按升序显示.我希望他们以随机顺序显示.这是我当前的控制器代码:
public function condos() {
$this->paginate['Unit']=array(
'limit'=>9,
'contain'=>array(
'User'=>array(
'id', 'user_name', 'area_code', 'exchange', 'sln', 'email'),
'Complex'=>array('id','complex_name', 'realname', 'photo1','photo2','photo3','photo4','photo5', 'complex_website')
),
'conditions'=>array(
'Unit.type'=>array('condo', 'rentalco'),
'Unit.active'=>1)
);
$data = $this->paginate('Unit');
$this->set('allcondos', $data);
}
Run Code Online (Sandbox Code Playgroud) 有没有办法在CakePHP中执行转换为IN条件的find()?似乎find()方法只需要一个值来搜索.
我想做这样的事情:
$this->User->findAllById(array(1, 5, 7));
Run Code Online (Sandbox Code Playgroud)
这会将SQL转换为:
SELECT * FROM users WHERE id IN (1, 5, 7);
Run Code Online (Sandbox Code Playgroud) 我有一个在cakephp 2.0中开发的网站,我想在两个表之间建立关系:
activity_ingredients
1 id int(10) UNSIGNED No None AUTO_INCREMENT
2 type_id tinyint(2) No None
3 activity_id int(11) No None
4 ingredient_id int(10) No None
5 created datetime
Run Code Online (Sandbox Code Playgroud)
行动
1 id int(10) UNSIGNED No None AUTO_INCREMENT
2 type_id tinyint(2) No None
3 language char(2) No None
4 text varchar(100) No None
5 created datetime
Run Code Online (Sandbox Code Playgroud)
我想将两个表与字段"type_id"相关联.我已经在这种模式下完成了我的代码:
class Action extends AppModel{
public $name = 'Action'; //non utilizzata nel sito è il nome del modello alla fine per migliorare la compatibilità
public $belongsTo …Run Code Online (Sandbox Code Playgroud) cakephp ×10
cakephp-model ×10
php ×4
cakephp-2.0 ×2
transactions ×2
cakephp-1.3 ×1
mysql ×1
pagination ×1
sorting ×1
unique-index ×1