Phalcon學習-model

追憶丶年華發表於2018-01-16

Model:
表與表之間的關係:
hasOne 一對一( $fields, $referenceModel, $referencedFields : 當前表中的欄位, 對應關係模型, 對應關係模型中表的字欄位 )
hasMany 一對多 ( $fields, $referenceModel, $referencedFields : 當前表中的欄位, 對應關係模型, 對應關係模型中表的字欄位 )
hasManyToMany 多對多
belongsTo 多對一( 屬於 ) ( $fields, $referenceModel, $referencedFields : 當前表中的欄位, 對應關係模型, 對應關係模型中表的字欄位 )
*********** 如專案中存在名稱空間 則 要在對應的關係中新增alias引數 array( 'alias' => 'namespace' )

$this->hasMany( 'id', 'Mp\pri\models\RolesUsers' , 'roleid', array( 'alias' => 'rolesusers' ));
$this->hasMany( 'id', 'Mp\pri\models\RolesMenus' , 'roleid', array( 'alias' => 'rolesmenus' ));

Phalcon中設定允許資料動態更新:( 初始化的時候 )

$this->useDynamicUpdate( true ); 

Phalocn中設定軟刪除標記:( 初始化的時候 )

use Phalcon\Mvc\Model\Behavior\SoftDelete;
$this->addBehavior( new SoftDelete(
  array(
    'field' => 'delsign',
    'value' => SystemEnums::DELSIGN_YES,
  )
) );
$res = Roles::findFirst( $where )->delete();
//當判斷是否刪除成功與否
if( empty( $res ) )
{//delete error
}
else
{//delete success
}

專案多模組並存在有命名:(跨模組取資料)

因類存在名稱空間問題 如果儲存成物件, 在取出資料的時候因存在名稱空間限制 會取不到session中的資料 ------ 解決方法 將資料儲存成陣列存入session中

Phalcon 新增/更新資料:

$id = $this->request->getPost('id');

if( isset( $id ) && FALSE != $id )  {
  $where = array(
    'conditions' => 'delsign=:del: and id=:optid:',
    'bind' => array( 'del' => SystemEnums::DELSIGN_NO,'optid' => $id ),
  );
  $cache = Cache::findFirst( $where );
  $cache->delsign = SystemEnums::DELSIGN_YES;
  $cache->modtime = TimeUtils::getFullTime();
  $cache->title = 'Login';
  $cache->action = 'loadding';
  $cache->seconds = 100;
  $cache->module_name = 'appmgr';
}

//add 
else  {
  $cache = new Cache();
  $cache->title = 'Roles';
  $cache->module_name = 'pri';
  $cache->controller = 'Roles';
  $cache->action = 'list';
  $cache->seconds = 20;
  $cache->comment = 'Add Test';
  $cache->createtime = TimeUtils::getFullTime();
  $cache->modtime = TimeUtils::getFullTime();
  $cache->delsign = SystemEnums::DELSIGN_NO;
}
if (! $cache->save()) {
  foreach ($cache->getMessages() as $message) {
    echo "Message: ", $message->getMessage();
    echo "Field: ", $message->getField();
    echo "Type: ", $message->getType();
  }
}
else {
  echo 'No Error';
}
exit;

採用PHQL方式更新資料:

$query = $this->modelsManager->createQuery( 'update \Mp\sys\Models\Cache set title =:tit:,modtime=:time: where id = :id:' );
$res = $query->execute(array(
  'tit' => $cache_name,
  'id' => $id,
  'time' => TimeUtils::getFullTime(),
));

相關文章