首页 >后端开发 >php教程 >phalcon框架中如何实现脱离模型进行sql查询?

phalcon框架中如何实现脱离模型进行sql查询?

WBOY
WBOY原创
2016-06-23 14:17:061519浏览

PHP 框架

比如,我有表A和表B,在models/下有A.php这个model类,而没有B的,现在在A中需要对表B进行一次SQL查询,在不创建B的model类的情况下如何拿到B的数据?

回复讨论(解决方案)

直接写原生的mysql_connect() mysql_select_db() mysql_query() 再循环结果集取数据  

$ar = $obj->fetchAll($sql); 

$r = $obj->fetchOne($sql);

其实 Phalcon 的类都是可以单独使用的,并不一定非要在框架中使用
比如

$connection = new \Phalcon\Db\Adapter\Pdo\Mysql(array(        "host" => "localhost",        "username" => "root",        "password" => "",        "dbname" => "test"    ));//print_r(get_class_methods($connection)); //从支持的方法上看,只不过是在PDO上扩展了一些功能$connection->query('set names gbk');$t = $connection->fetchAll('select * from `123`', 1);print_r($t);
Array
(
    [0] => Array
        (
            [id] => 1
            [姓名] => 张三
            [型号] => A8-300
            [工位] => A
            [数量] => 200
            [时间] => 2013-06-05 08:46:00
        )

    [1] => Array
        (
            [id] => 2
            [姓名] => 李四
            [型号] => A8-300
            [工位] => B
            [数量] => 121
            [时间] => 2013-06-05 08:48:00
        )

    [2] => Array
        (
            [id] => 3
            [姓名] => 王五
            [型号] => A1-200
            [工位] => C
            [数量] => 45
            [时间] => 2013-06-05 07:48:00
        )

    [3] => Array
        (
            [id] => 4
            [姓名] => 张三
            [型号] => A8-300
            [工位] => A
            [数量] => 420
            [时间] => 2013-06-05 10:46:00
        )

    [4] => Array
        (
            [id] => 5
            [姓名] => 王五
            [型号] => A8-300
            [工位] => C
            [数量] => 500
            [时间] => 2013-06-05 13:46:00
        )

)
我这个表很怪异吧

$ar = $obj->fetchAll($sql); 

$r = $obj->fetchOne($sql);

其实 Phalcon 的类都是可以单独使用的,并不一定非要在框架中使用
比如

$connection = new \Phalcon\Db\Adapter\Pdo\Mysql(array(        "host" => "localhost",        "username" => "root",        "password" => "",        "dbname" => "test"    ));//print_r(get_class_methods($connection)); //从支持的方法上看,只不过是在PDO上扩展了一些功能$connection->query('set names gbk');$t = $connection->fetchAll('select * from `123`', 1);print_r($t);
Array
(
    [0] => Array
        (
            [id] => 1
            [姓名] => 张三
            [型号] => A8-300
            [工位] => A
            [数量] => 200
            [时间] => 2013-06-05 08:46:00
        )

    [1] => Array
        (
            [id] => 2
            [姓名] => 李四
            [型号] => A8-300
            [工位] => B
            [数量] => 121
            [时间] => 2013-06-05 08:48:00
        )

    [2] => Array
        (
            [id] => 3
            [姓名] => 王五
            [型号] => A1-200
            [工位] => C
            [数量] => 45
            [时间] => 2013-06-05 07:48:00
        )

    [3] => Array
        (
            [id] => 4
            [姓名] => 张三
            [型号] => A8-300
            [工位] => A
            [数量] => 420
            [时间] => 2013-06-05 10:46:00
        )

    [4] => Array
        (
            [id] => 5
            [姓名] => 王五
            [型号] => A8-300
            [工位] => C
            [数量] => 500
            [时间] => 2013-06-05 13:46:00
        )

)
我这个表很怪异吧

在index里面依赖注入的时候已经建立了一次数据库的连接,假如再使用这种方法那就又多了一个连接了不是吗?有没有更好的方法?只存在一个数据库连接

非也,我贴的代码只是说明 Phalcon 的类都是可以单独使用的

model类是继承于 Phalcon 数据库类的
所以他一样具有基类的方法
你用 get_class_methods 函数看一下就知道了

非也,我贴的代码只是说明 Phalcon 的类都是可以单独使用的

model类是继承于 Phalcon 数据库类的
所以他一样具有基类的方法
你用 get_class_methods 函数看一下就知道了

其实也是,一开始我也这样子想,没必要死磕这点。
现在特别蛋疼的是,数据库之前设计字段名有关键字”desc“,结果不使用SELECT * 。。方法查询的话没办法取得这个字段,有遇到过这种情况吗?


非也,我贴的代码只是说明 Phalcon 的类都是可以单独使用的

model类是继承于 Phalcon 数据库类的
所以他一样具有基类的方法
你用 get_class_methods 函数看一下就知道了

其实也是,一开始我也这样子想,没必要死磕这点。
现在特别蛋疼的是,数据库之前设计字段名有关键字”desc“,结果不使用SELECT * 。。方法查询的话没办法取得这个字段,有遇到过这种情况吗?

遇到过.... 印象中改了字段名... 还是说用其他方法也可以?... 很久了忘记处理方式了.



非也,我贴的代码只是说明 Phalcon 的类都是可以单独使用的

model类是继承于 Phalcon 数据库类的
所以他一样具有基类的方法
你用 get_class_methods 函数看一下就知道了

其实也是,一开始我也这样子想,没必要死磕这点。
现在特别蛋疼的是,数据库之前设计字段名有关键字”desc“,结果不使用SELECT * 。。方法查询的话没办法取得这个字段,有遇到过这种情况吗?

遇到过.... 印象中改了字段名... 还是说用其他方法也可以?... 很久了忘记处理方式了.


要是改字段的话不现实啊。。。要改的话众多项目也都要改代码,而且数据量太大,改起来会锁表,影响各个应用的正常运行。倒是想过干脆select *算了,查出来再过滤字段?可是总感觉这样也会影响效率。。




非也,我贴的代码只是说明 Phalcon 的类都是可以单独使用的

model类是继承于 Phalcon 数据库类的
所以他一样具有基类的方法
你用 get_class_methods 函数看一下就知道了

其实也是,一开始我也这样子想,没必要死磕这点。
现在特别蛋疼的是,数据库之前设计字段名有关键字”desc“,结果不使用SELECT * 。。方法查询的话没办法取得这个字段,有遇到过这种情况吗?

遇到过.... 印象中改了字段名... 还是说用其他方法也可以?... 很久了忘记处理方式了.


要是改字段的话不现实啊。。。要改的话众多项目也都要改代码,而且数据量太大,改起来会锁表,影响各个应用的正常运行。倒是想过干脆select *算了,查出来再过滤字段?可是总感觉这样也会影响效率。。





不知道能否帮到你 加个撇号 貌似就不报错了





非也,我贴的代码只是说明 Phalcon 的类都是可以单独使用的

model类是继承于 Phalcon 数据库类的
所以他一样具有基类的方法
你用 get_class_methods 函数看一下就知道了

其实也是,一开始我也这样子想,没必要死磕这点。
现在特别蛋疼的是,数据库之前设计字段名有关键字”desc“,结果不使用SELECT * 。。方法查询的话没办法取得这个字段,有遇到过这种情况吗?

遇到过.... 印象中改了字段名... 还是说用其他方法也可以?... 很久了忘记处理方式了.


要是改字段的话不现实啊。。。要改的话众多项目也都要改代码,而且数据量太大,改起来会锁表,影响各个应用的正常运行。倒是想过干脆select *算了,查出来再过滤字段?可是总感觉这样也会影响效率。。





不知道能否帮到你 加个撇号 貌似就不报错了

0.0这个我知道,我是讲在phalcon中来执行$modelsManager->executeQuery($sql);的查询方法,其中$sql="SELECT id, name, `desc` FROM ....";一般我们正常写法会给关键字加反引号,但是使用phalcon他会解析sql,这样写不行。。

怎么呢?我不就是这么写的吗?

$t = $connection->fetchAll('select * from `123`', 1);

怎么呢?我不就是这么写的吗?

$t = $connection->fetchAll('select * from `123`', 1);


public PDOStatement executePrepared(PDOStatement $statement, array $placeholders, array $dataTypes);

这里的$dataTypes是什么?例子里面只传了两个参数啊

不太明白你的意思
间隔时间长了,跟不上你的思路

不太明白你的意思
间隔时间长了,跟不上你的思路

额。。。之前的那个问题解决了,是我没有把新问题说清楚,抱歉。是这样的e,在看文档时发现这个方法

public PDOStatement prepare (string $sqlStatement)//Returns a PDO prepared statement to be executed with ‘executePrepared’$statement = $db->prepare(’SELECT * FROM robots WHERE name = :name’);$result = $connection->executePrepared($statement, array(’name’ => ’Voltron’));public PDOStatement executePrepared (PDOStatement $statement, array $placeholders, array $dataTypes)//Executes a prepared statement binding. This function uses integer indexes starting from zero


但是他这里的示例executePrepared只传了两个参数,但是定义里面是有三个参数的,array $dataTypes是必传单数,想知道这个$dataTypes是啥

不太明白你的意思
间隔时间长了,跟不上你的思路
版主版主快现身~~!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn