我是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) 是否可以为模型定义全局条件?
我有2个型号:User和Student.在数据库中,它们都使用表,users但每个学生已设置parent_id为其所有者(在同一个表中设置),而每个用户都parent_id设置为Null.
当我使用例如
$this->find('all');
Run Code Online (Sandbox Code Playgroud)
在Student模型中我想强制Cake只返回数据库表users中的那些记录parent_id != Null.
所以问题是 - 我可以在模型中以某种方式定义全局条件吗?像这样的东西:
public $conditions = array('Student.parent_id !=' => Null);
我有一个带有URL字段的表单.该字段的默认值为:http://.但该领域不是必需的.用户可以跳过它并提交表单.它不应该返回错误,因为它不是必需的,因为它们没有输入URL.但是现在它确实如此,因为http://.
我听说我可以使用beforeValidate()检查它是否为http://,然后清除URL字段,允许我跳过错误消息.
但我不知道如何使用beforeValidate().我搜索了谷歌,但我找不到任何有用的例子.我在哪里放置beforeValidate()的代码?这是一个功能吗?如何从那里访问提交的表单数据?
谢谢.
我的问题是当我从用户表中获取用户数据时,用户表的所有字段都从用户表中获取..但我不想包含密码和电子邮件地址,所以有没有办法只获取除密码和电子邮件地址?
问候.
我有一个用户选择文档的表单.然后,控制器将该文档保存到webroot文件夹中.
但是,在它显示表单之前,它给了我一个错误:
Missing Database Table
Error: Table office_layouts for model OfficeLayout was not found in datasource default.
Run Code Online (Sandbox Code Playgroud)
哪个是正确的,office_layouts没有数据库表.但它不是必需的.这就是没有桌子的原因.表单刚刚上传到服务器.
我已阅读创建表单,并尝试了以下内容:
// file: View/OfficeLayout/upload.ctp
echo $this->Form->create( null ,array('type' => 'file')); ?>
<fieldset>
<legend><?php echo __(' Add Layout for ' . $branch); ?></legend>
<?php
echo $this->Form->input('layout',array('type'=>'file'));
?>
</fieldset>
<?php echo $this->Form->end(__('Submit')); ?>
Run Code Online (Sandbox Code Playgroud)
以及null转换到控制器名称(在这种情况下OfficeLayout).我也删除了所有参数(thus creating it like so: $this->Form->create())
在我的控制器中,我有以下内容:
public function upload($branch = null) {
$this->set('branch',$branch);
if(isset($this->request->data['OfficeLayout'])) {
$file = $this->request->data['OfficeLayout']['layout'];
if($file['error'] === UPLOAD_ERR_OK && move_uploaded_file($file['tmp_name'],APP . 'docs' …Run Code Online (Sandbox Code Playgroud) 我有两个表都有字段username.我如何为本地和外国表指定字段名称?
我想CakePHP会做类似的事情
ON (`T1`.`username` = `T2`.`username`)`
Run Code Online (Sandbox Code Playgroud)
结果.如果没有任何更改,表将加入以下条件:
ON (`T1`.`id` = `T2`.`t1_id`)`
Run Code Online (Sandbox Code Playgroud)
设置'foreign_key' = 'username'属性是不够的,因为它会产生这样的查询:
ON (`t1`.`id` = `t2`.`username`)`
Run Code Online (Sandbox Code Playgroud)
我有两个解决方案.第一个是使用'join'属性并动态连接表.在这种情况下,我可以设置本地和外地字段.但是,如果我需要将更多表连接到那个表,手动加入,我不能再使用包含我需要手动编写以下连接,即使这些关联设置正确.所以我需要每次编写长连接定义而不是使用'contain' => array('T1', 'T2', 'T3')
其次是将表的'primary_key'设置为相应的字段.它可以在模型文件中或在运行时中完成.在我的情况下,它不能在模型中完成,因为该表也通过其'id'字段具有"正确"关联.设置运行时是这样的,但我不喜欢它,因为它不明显,看起来像一个黑客.
当我问这个问题时,我以为我错过了一些明显的东西,但现在我明白CakePHP就是不能这样做.所以我开始了一个赏金,希望有人分享解决方案.如果不是,我将尝试读取蛋糕源并重新定义模型的一些方法,以添加'foreign_key'在关联定义附近定义本地字段的能力.
我是CakePHP的新手,但我想我已经开始了解它.我试图递归地提取相关的表信息,但我想指定要递归的相关模型.让我举个例子来证明我的目标:
我有一个模型"客户",其中包含公司名称,网站等信息."客户"有许多"地址",其中包含联系人姓名,街道,城市,州,国家等个人联系人的信息."客户"也属于"CustomerType",它只是具有描述性类别信息 - 名称和描述,如"分销商"或"制造商".
当我对"客户"进行查找时,我希望将"CustomerType"和"Address"信息关联为子数组,只需正确设置hasMany和belongsTo关联即可.但现在,这是我的问题:我希望得到相关的州/国家信息.所以,不是每个"地址"数组行只有"state_id",我希望它有"state"=> array("id"= 20,"name"="纽约",......)等.
如果我在合作伙伴模型中将$ recursive设置为更高的值(例如,2),我会得到我想要的每个"地址"中的州/国家/地区信息.但它也会对"CustomerType"进行递归,这导致我的"Partner"对象的"CustomerType"字段具有与该类型匹配的所有Customer对象的大量数组,这可能是数千条长.
所以关键是,我不想在"CustomerType"上递归,只在"地址"上.有没有办法可以设置它?
抱歉这个冗长的问题,并提前感谢!
我有一个用户控制器,我需要在那些users_controllers上使用照片模型,我可以使用它从以下访问该模型,哪些是标准使用?
$this->loadModel('Photo');
Run Code Online (Sandbox Code Playgroud)
要么
var $uses =array('User','Photo');
Run Code Online (Sandbox Code Playgroud)
加载模型或$ uses需要使用的数组?
有谁知道如何从型号名称获取表名?此外,我想获取该模型/表名称的所有列名称及其类型.是否有可能获得给定型号名称的详细信息?
谢谢.
我刚安装了CakePHP 2.0.2用于新项目.我正在尝试使用被调用的数据库配置,development但我的模型似乎没有提起它.
基于CakePHP 2的新目录和文件名约定,我在以下位置创建了以下内容/app/Model/AppModel.php:
<?php
class AppModel extends Model {
public $useDbConfig = 'development';
}
Run Code Online (Sandbox Code Playgroud)
但是,默认主页告诉我:
Cake无法连接到数据库.
然而,如果我在更改配置的名称/app/Config/database.php,以default将信息变为一个成功的消息,就好像它不拿起我的自定义AppModel类.
我该如何解决这个问题?正如新的CakePHP 2.0文档所说的$useDbConfig那样,如上所述使用该属性?
编辑:内容/app/Config/database.php:
class DATABASE_CONFIG {
public $development = array(
'datasource' => 'Database/Mysql',
'persistent' => false,
'host' => 'localhost',
'login' => 'root',
'password' => '',
'database' => 'cakephp_db',
'prefix' => '',
'encoding' => 'utf8',
);
}
Run Code Online (Sandbox Code Playgroud) cakephp-model ×10
cakephp ×9
php ×5
cakephp-1.3 ×3
cakephp-2.0 ×3
cakephp-2.1 ×1
cakephp-2.3 ×1
transactions ×1