繁体   English   中英

无法更新php activerecord:模型为只读

[英]Can not update php activerecord: model is read-only

我正在尝试使用php activerecord更新用户详细信息表,但每次遇到此错误

:: save()无法调用,因为此模型设置为只读

我可以插入同一张表,但无法更新

Details.php

<?php
class Details extends ActiveRecord\Model
{
public static $table_name='details';
public static $primary_key='id_user_detail';

public function before_create()
{
   $this->date_created      = date("Y-m-d H:i:s");
   $this->date_modified     = date("Y-m-d H:i:s");
}

public function before_update()
{
   $this->date_modified    = date("Y-m-d H:i:s");
}

}?>

型材edit.php

 $sql   = " select * from details where id_user_detail=1";
 $user  = Details::find_by_sql($sql);
 $user->user_fname="test";
 $user->save();

我该如何更新?

它是只读的事实是可以预期的。 请参阅有关自定义SQL查找器的手册

这会将您的模型呈现为只读状态,因此您不能在返回的模型上使用任何写入方法。

无需使用此复杂的查找器,只需使用AR模型:

 $user  = Details::find(1);
 $user->user_fname="test";
 $user->save();

之所以id_user_detail是因为id_user_detail是您的主键。 如果要在另一个字段上查找,请说user_fname ,执行此操作:

 $user  = Details::find_by_user_fname('test');
 $user->user_fname="test2";
 $user->save();

阅读这些查找器以及如何使用它们,因为您应该避免使用sql-finder。

发生这种情况是因为$ user包含一个数组,save()方法仅用于对象。 您可以使用其他查找器,但是当它是一个复杂查询时,可以使用foreach,然后默认使用查找器。

您可能试图在实例化类之前更改类属性。

Details :: find_by_sql()应该返回一个新的Details实例。 例如 :

public function find_by_sql($sql) {
   //execute sql
   if( some thing is returned ) {
      $details = new Details();
      $details->setByResult($sql_result)

      return $details;
   }

   return null;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM