首页 > 代码库 > [PHP] Phalcon操作示范

[PHP] Phalcon操作示范

这篇内容将对下列操作进行示范:

Insert、Select、Update、Calculation、Transaction、models advanced、dev-tools、cookies

 

[ Insert ]

(1)

// 模型内操作,data是[‘字段‘=>‘值‘]的一维数组。

$bool = $this->save($data);

return $bool;

(2)

// static

$db = \Phalcon\Di::getDefault()->getShared(‘db‘);
// $db = $this->di->getShared(‘db‘);

$bool = $db->insert(
    "dianzan",
    array_values($data),  // 顺序对应字段的值数组,不能含空字符串
    array_keys($data)     // 字段数组
);

return $db->lastInsertId();

(3)

// 批量insert

$data[] = [ 
    ‘site‘ => $v, 
    ‘role_id‘ => $role_id,
    ‘question_id‘ => $question_id,
];

$sql = \Alcon\Supports\Helper::build_insert_sql(‘pic_log‘, ‘site, role_id, question_id‘, $data); 

$db = \Phalcon\Di::getDefault()->getShared(‘db‘);

$bool = (bool)$db->execute($sql);

return $bool;

 

[ Select ]

(1)

// 模型内操作, 参数都为可选.

$arr = [
    // "conditions" => "question_id = 1" // 与下面直接写条件的形式任选一种
    "status = 1 AND role_id = 3",
    "columns" => "id,isdel",
    "order" => "sort DESC, addtime DESC",
    "limit" => "2",
];

$all_res = static::find($arr)->toArray(); // 多条

$first_res = static::findFirst($arr)->toArray(); // 单条

(2)

// phalcon query language

$manager = \Phalcon\Di::getDefault()->getShared(‘modelsManager‘);

$phql = "SELECT MAX(pic_status) AS pic_status FROM " . __CLASS__ . " WHERE question_id = :question_id:";

$res = $manager->executeQuery($phql, [‘question_id‘ => $question_id])
        ->getFirst()
        ->toArray();

return $res[‘pic_status‘];

(3)

// Query Builder

$builder = \Phalcon\Di::getDefault()->getShared(‘modelsManager‘)->createBuilder();

$res = $builder->columns(["MAX(" . __CLASS__ . ".pic_status)"])
        ->from(__CLASS__)
        ->where("question_id = :question_id:", ["question_id" => $question_id])
        ->getQuery()->execute()
        ->getFirst()
        ->toArray();

return reset($res);

 

[ Update ]

(1)

$db = \Phalcon\Di::getDefault()->getShared(‘db‘);
// $db = $this->di->getShared(‘db‘);

$bool = $db->update(
    ‘wenda_log‘,
    [‘accept_time‘],       // 字段数组
    [time()],              // 值数组,对应顺序
    "id = ‘{$answer_id}‘"  // 条件
);

return $bool;

(2)

$db = \Phalcon\Di::getDefault()->getShared(‘db‘);

$sql = "UPDATE question_log SET answer_num = answer_num + 1 WHERE question_id =  ‘{$question_id}‘";

return (bool)$db->execute($sql);

(3)

$manager = \Phalcon\Di::getDefault()->getShared(‘modelsManager‘);

$phql = "UPDATE " . __CLASS__ . " SET iscollect = :iscollect: WHERE id = ‘{$id}‘";

// $data = http://www.mamicode.com/[‘iscollect‘ => 1];
$res = $manager->executeQuery($phql, $data);

$bool = $res->success();

return $bool;

(4)

// 模型内

$this->save($data);

 

[ Calculation ]

https://docs.phalconphp.com/en/latest/reference/models.html

// 总和
return static::sum([
    ‘conditions‘ => ‘xxxx‘,
    ‘column‘ => ‘shownum‘,
]);

// 平均值
return static::average([
    ‘column‘ => ‘shownum‘,
]);

// 最大
return static::maximum([
    ‘column‘ => ‘shownum‘,
]);

// 最小
return static::minimum([
    ‘column‘ => ‘shownum‘,
]);

// 数量

// conditions
return static::count("area=‘北京‘");

// distinct
return static::count([
    ‘distinct‘ => ‘area‘,
]);

 

[ Transaction ]

https://docs.phalconphp.com/en/latest/reference/model-transactions.html

$db = $di->get(‘db‘);
$db->begin();
$bool = $db->execute("INSERT ...");
if (! $bool) {
    $db->rollback();
} else {
    $bool = $db->execute("UPDATE ...");
    if (! $bool) {
        $db->rollback();
    } else {
        $db->commit();
    }
}

 

[ model advanced ]

https://docs.phalconphp.com/en/latest/reference/models-advanced.html

$di->set(‘otherDb‘, function() {});
$di->set(‘dbSlave‘, function() {});
$di->set(‘dbMaster‘, function() {});
class Exmodel extends \Phalcon\Mvc\Model
{
    public function initialize()
    {
        $this->setConnectionService("otherDb");
    }
}
class Exmodel extends \Phalcon\Mvc\Model
{
    public function initialize()
    {
        $this->setReadConnectionService("dbSlave");
        $this->setWriteConnectionService("dbMaster");
    }
}

https://github.com/farwish/alcon/blob/master/src/Traits/ModelTrait.php

https://github.com/farwish/alcon/blob/master/src/Traits/ModelAdvanceTrait.php

 

[ dev-tools ]

#example:

phalcon model --name=question_log --namespace=Demo\\Frontend\\Models --directory=/home/www/Demo --output=apps/frontend/models

phalcon controller --name=User --namespace=Demo\\Frontend\\Controllers --directory=/home/www/ --output=apps/frontend/controllers --base-class=ControllerBase --force

 

[ cookies ]

// This method does not removes cookies from the _COOKIE superglobal
// This method overrides any cookie set before with the same name
$this->cookies->get(‘name‘)->delete();

// Sets a cookie to be sent at the end of the request
$this->cookies->set(‘name‘, ‘value‘, time() + $expire, ‘/‘, false, ‘example.com‘, true);

// Sends the cookies to the client.
// Cookies aren‘t sent if headers are sent in the current request
$this->cookies->send();

// Check if a cookie is defined in the bag or exists in the _COOKIE superglobal
if ( $this->cookies->has(‘name‘) ) {

    // Get the cookie
    $this->cookies->get(‘name‘);

    // Get the cookie‘s value
    $this->cookies->get(‘name‘)->getValue();
}


// By default, cookies are automatically encrypted before being sent to the client and are decrypted when retrieved from the user. 

// Disable encryption in the following way
$di->set(‘cookies‘, function() {
    return (new \Phalcon\Http\Response\Cookies())->useEncryption(false);
});

// To use encryption, a global key must be set.
$di->set(‘crypt‘, function() {
    return (new \Phalcon\Crypt())->setKey(‘^YourOwnKey$‘);
});

 

通过查询手册可以获得上述相关内容的帮助。

重点,推荐一个用于[Phalcon]项目开发的公用库:

https://github.com/farwish/alcon

 

Link: http://www.cnblogs.com/farwish/p/6357845.html

@黑眼诗人  <www.farwish.com>

[PHP] Phalcon操作示范