如何在模型中保存 cakephp 对象

Posted

技术标签:

【中文标题】如何在模型中保存 cakephp 对象【英文标题】:How to save cakephp object within model 【发布时间】:2012-05-05 00:39:54 【问题描述】:

我有一个项目,目标是当用户创建一个项目时,我会在保存项目中提示输入电子邮件地址我将检查用户是否已经存在,如果不存在,我将继续创建具有一堆默认值的新用户,在后台,如果用户想要激活,那么用户可以回来并完成个人资料。我怎么能在模型中做到这一点。似乎唯一的保存方法是传入数组我如何使用对象参数来做到这一点。

App::uses('User', 'Model');
class Item extends AppModel
   public function save($data = null, $validate = true, $fieldList = array()) 
   $user = User::getUserbyEmail($data['Item']['email_address']);
   if($user)
      $user = new User();
      $user->firstName = "Bob";
      $user->save();  /// this save does not work
   
   //get user Id and call parent save
   .........


class User extends AppModel 
   public $firtName;
   private $created;
   private $status = 0; //0 is in active
   $private $password;

   public function  __construct($id = false, $table = null, $ds = null) 
     parent::__construct($id, $table, $ds);
     $this->created = date("Y-m-d H:i:s");
     $this->setPassword($password);
  

  public function setPassword($value)
     $this->password = mysecret_algorithm(standard_password);
   

 ..bunch of setter and getter here


我正在使用 cakephp,但我不想在控制器中执行此操作,因为我在多个位置有项目添加功能,如果在模型中这样做会很好,然后每个控制器只需调用 $this->Item->save() ;

【问题讨论】:

【参考方案1】:

在您的代码中,User::getUserbyEmail 的用途是什么?

至于保存用户,试试这个:

class Item extends AppModel
   public function save($data = null, $validate = true, $fieldList = array()) 
       $user = User::getUserbyEmail($data['Item']['email_address']);
       if (!$user)
           $user = new User(); // EDIT: forgot this part
           $user->create();
           $user->set($userData);
           $user->save();  /// this save does not work
       
   
   //get user Id and call parent save
   .........

上面的$userData 应该是一个关联数组,其中数组键是用户数据库表中的字段名称:

$userData = array(
    'firstname' => 'Bob'
);

请注意,在这种情况下,您的代码必须通过验证。

【讨论】:

以上是关于如何在模型中保存 cakephp 对象的主要内容,如果未能解决你的问题,请参考以下文章

在 CakePHP 中保存时如何验证关联模型是不是存在

CakePHP - 如何在保存时将关联记录添加到模型中?

Cakephp:使用`saveAssociated()`时如何将`parent_id`保存到基于树的模型中?

Cakephp - 条件保存

CakePHP 1.3 - 保存不相关模型的事务

CakePHP 如何在一个视图中显示来自三个相关模型的数据?