phalcon 使用db示例

$connection=$this->getDI()->get('db');

        // 特別注意,此表名必須自己手動添加表前綴,也就是這里寫完整表名?。?        // 注意點2,這里返回一般都是數(shù)組。
        echo "<h1>循環(huán)打印,query,然后fetch,此時也能直接得到所有行數(shù)。</h1>";
        
        echo "vbt5JSRWdU1KMyv";
        echo <<<html
<pre>
        \$connection=\$this->getDI()->get('db');
        \$sql = 'SELECT id, name FROM temp ORDER BY name limit 10 ';
        // 將SQL語句發(fā)送到數(shù)據(jù)庫系統(tǒng)
        \$result = \$connection->query(\$sql);
        // 打印每個 robot name
        while (\$robot = \$result->fetch()) {
            echo \$robot['name'];
        }
        echo ",總記錄數(shù)". \$result->numRows() ;
</pre>        
html;

        $sql = 'SELECT id, name FROM temp ORDER BY name limit 10 ';

        // 將SQL語句發(fā)送到數(shù)據(jù)庫系統(tǒng)
        $result = $connection->query($sql);
        while ($robot = $result->fetch()) {
            echo $robot['name'];

        }
        echo ",總記錄數(shù)". $result->numRows() ;
        echo "<hr>";



        // 獲取數(shù)組中的所有行
        echo "<h1>直接獲取所有行,最簡單直白一步到位,fetchAll方法</h1>";
       echo "118.31.110.29.45.79.92.238";
        echo <<<html
        <pre>
        \$sql = 'SELECT id, name FROM temp ORDER BY name limit 10 ';
        \$robots = \$connection->fetchAll(\$sql);
        foreach (\$robots as \$robot) {
            echo \$robot['name'];
        }
</pre>
html;

        $robots = $connection->fetchAll($sql);
        foreach ($robots as $robot) {
            echo $robot['name'];
        }
        echo "<hr>";

        // 只獲得第一行
        echo "<h1>直接獲取第一行,fetchOne方法</h1>";
        echo <<<html
        <pre>
        \$sql = 'SELECT id, name FROM temp ORDER BY name limit 10 ';
        \$robot = \$connection->fetchOne(\$sql);
        echo \$robot['name'];
</pre>
html;
        $robot = $connection->fetchOne($sql);
        echo $robot['name'];
        echo "<hr>";

        echo "<h1>select查詢,占位符第一種,純問號,最最簡單</h1>";
        echo <<<html
<pre>
        \$sql    = 'SELECT * FROM temp WHERE name = ? ORDER BY name';
        \$result = \$connection->query(
            \$sql,
            [
                'x11',
            ]
        );
        echo "總記錄數(shù)". \$result->numRows();
</pre>
html;

        $sql    = 'SELECT * FROM temp WHERE name = ? ORDER BY name';
        $result = $connection->query(
            $sql,
            [
                'x11',
            ]
        );
        echo "總記錄數(shù)". $result->numRows();
        echo "<hr>";

        // 與命名占位符綁定
        echo "<h1>insert 插入,占位符第2種,命名符號,注意insert 也可以直接問號占位符</h1>";
        echo <<<html
<pre>
        \$sql     = 'INSERT INTO temp(name, year) VALUES (:name, :year)';
        \$name = 'Astro Boy'.time();
        \$success = \$connection->query(
            \$sql,
            [
                'name' => \$name,
                'year' => 1952,
            ]
        );
</pre>
html;
        $sql     = 'INSERT INTO temp(name, year) VALUES (:name, :year)';
        $name = 'Astro Boy'.time();
        $success = $connection->query(
            $sql,
            [
                'name' => $name,
                'year' => 1952,
            ]
        );

        $sql    = 'SELECT * FROM temp WHERE name = ? ORDER BY name';
        $result = $connection->query(
            $sql,
            [
                $name,
            ]
        );
        echo "總記錄數(shù)". $result->numRows();
        echo "<hr><hr><hr><hr><hr><hr><br><br><br><br><br><br><br><br><br>";

        // 開始使用 modelsManager 組件
        echo "<h1>select,開始使用 modelsManager 組件,和phql,和toArray方法</h1>";
        echo <<<html
        <pre>
        \$phql = "SELECT * FROM Apps\Models\Entities\Temp WHERE id < :id:";
        \$robots = \$this->modelsManager->executeQuery(\$phql, ['id' => 3]);
        var_dump(\$robots->toArray());
</pre>
html;
        $phql = "SELECT * FROM Apps\Models\Entities\Temp WHERE id < :id:";
        $robots = $this->modelsManager->executeQuery($phql, ['id' =>3]);
        var_dump($robots->toArray());
        echo "<hr>";

//        try {
//            $phql2 = "SELECT * FROM Apps\Models\Entities\Temp LIMIT :number:";
//            $robots = $this->modelsManager->executeQuery(
//                $phql2,
//                ['number' => 10],
//                Column::BIND_PARAM_INT
//            );
//            var_dump( $robots->toArray() );
//        }catch (\Exception $e){
//            echo $e->getMessage();
//        }

        echo "<h1>select,開始使用 phalcon 專用帶變量占位符,有坑,占位符number2:int不能相同。</h1>";
        echo <<<html
        <pre>
        \$phql = "SELECT * FROM Apps\Models\Entities\Temp LIMIT {number:int}";
        \$robots = \$this->modelsManager->executeQuery(
            \$phql,
            ['number' => 2]
        );
        var_dump(\$robots->toArray());
        
        \$phql = "SELECT * FROM Apps\Models\Entities\Temp WHERE name = {name:str}";
        \$robots = \$this->modelsManager->executeQuery(
            \$phql,
            ['name' => 'x11']
        );
        var_dump(\$robots->toArray());
        
        \$phql = "SELECT * FROM Apps\Models\Entities\Temp LIMIT {number2:int}";
        \$robots = \$this->modelsManager->executeQuery(
            \$phql,
            ['number2' => 2]
        );
        var_dump(\$robots->toArray());
        
        \$phql = "SELECT * FROM Apps\Models\Entities\Temp WHERE name = {name}";
        \$robots = \$this->modelsManager->executeQuery(
            \$phql,
            ['name' => 'x113']
        );
        var_dump(\$robots->toArray());
        
        \$phql = "SELECT * FROM Apps\Models\Entities\Temp WHERE id IN ({id:array})";
        \$robots = \$this->modelsManager->executeQuery(
            \$phql,
            ['id' => [1, 2, 3]]
        );
        var_dump(\$robots->toArray());
        
</pre>
html;
        $phql = "SELECT * FROM Apps\Models\Entities\Temp LIMIT {number:int}";
        $robots = $this->modelsManager->executeQuery(
            $phql,
            ['number' => 2]
        );
        var_dump($robots->toArray());
        echo "<hr>";

        $phql = "SELECT * FROM Apps\Models\Entities\Temp WHERE name = {name:str}";
        $robots = $this->modelsManager->executeQuery(
            $phql,
            ['name' => 'x11']
        );
        var_dump($robots->toArray());
        echo "<hr>";

        //dd(555);
        $phql = "SELECT * FROM Apps\Models\Entities\Temp LIMIT {number2:int}";
        $robots = $this->modelsManager->executeQuery(
            $phql,
            ['number2' => 2]
        );
        var_dump($robots->toArray());
        echo "<hr>";

        $phql = "SELECT * FROM Apps\Models\Entities\Temp WHERE name = {name}";
        $robots = $this->modelsManager->executeQuery(
            $phql,
            ['name' => 'x113']
        );
        var_dump($robots->toArray());
        echo "<hr>";

        $phql = "SELECT * FROM Apps\Models\Entities\Temp WHERE id IN ({id:array})";
        $robots = $this->modelsManager->executeQuery(
            $phql,
            ['id' => [1, 2, 3]]
        );
        var_dump($robots->toArray());
        echo "<hr>";



        echo "<h1>insert,專用函數(shù)插入數(shù)據(jù),原始表名,動態(tài)生成必要的SQL(另一種語法)</h1>";
        echo <<<html
        <pre>
        
        // 方法:excute
        \$sql     = 'INSERT INTO `robots`(`name`, `year`) VALUES (?, ?)';
        \$success = \$connection->execute(
           \$sql,
           [
              'Astro Boy',
              1952,
           ]
        );
        
        // 動態(tài)生成必要的SQL,方法 insert
        \$success = \$connection->insert(
            'robots',
            [
                'Astro Boy',
                1952,
            ],
            [
                'name',
                'year',
            ],
        );
        
        
        // 方法:insertAsDict
        \$name = 'Astro Boy11'.time();
        \$success = \$connection->insertAsDict(
            'temp',
            [
                'name' => \$name,
                'year' => 1952,
            ]
        );
</pre>
html;
        $name = 'Astro Boy11'.time();
        $success = $connection->insertAsDict(
            'temp',
            [
                'name' => $name,
                'year' => 1952,
            ]
        );
        $sql    = 'SELECT * FROM temp WHERE name = ? ORDER BY name';
        $result = $connection->query(
            $sql,
            [
                $name,
            ]
        );
        echo "總記錄數(shù)". $result->numRows();
        echo "<hr>";

        echo "<h1>update,原始更新,方法 execute</h1>";
        echo <<<html
        <pre>
        \$sql     = 'UPDATE temp SET `name` = 'Astro boy' WHERE `id` = 1';
        \$success = \$connection->execute(\$sql);
        echo '有\(zhòng)$success被更新';
</pre>
html;
        $sql     = "UPDATE temp SET `name` = 'Astro boy' WHERE `id` = 1";
        $success = $connection->execute($sql);
        echo "有{$success}被更新";
        echo "<hr>";

        echo "<h1>update,占位符原始更新,方法 execute</h1>";
        echo <<<html
        <pre>
        \$sql     = 'UPDATE temp SET name = ? WHERE id = ?';
        \$success = \$connection->execute(
            \$sql,
            [
                'Astro Boy'.time(),
                1,
            ]
        );
</pre>
html;
        $sql     = 'UPDATE temp SET name = ? WHERE id = ?';
        $success = $connection->execute(
            $sql,
            [
                'Astro Boy'.time(),
                1,
            ]
        );
        echo "有{$success}被更新";
        echo "<hr>";

        echo "<h1>update,專用函數(shù)方法 updateAsDict, 更新數(shù)據(jù),原始表名,動態(tài)生成必要的SQL(另一種語法)</h1>";
        echo <<<html
        <pre>
        \$success = \$connection->updateAsDict(
            'temp',
            [
                'name' => 'New Astro Boy'.time(),
            ],
            [
                'conditions' => 'id = ?',
                'bind'       => [101],
                'bindTypes'  => [\\PDO::PARAM_INT], // Optional parameter
            ]
        );
</pre>
html;
        $success = $connection->updateAsDict(
            'temp',
            [
                'name' => 'New Astro Boy'.time(),
            ],
            [
                'conditions' => 'id = ?',
                'bind'       => [101],
                'bindTypes'  => [\PDO::PARAM_INT], // Optional parameter,可選,這行去掉也行。
            ]
        );
        echo "有{$success}被更新";
        echo "<hr>";
        
        
        echo <<<html
        <pre>
        // 使用原始SQL語句刪除數(shù)據(jù),方法 execute
        \$sql     = 'DELETE `robots` WHERE `id` = 101';
        \$success = \$connection->execute(\$sql);
        
        // 占位符
        \$sql     = 'DELETE `robots` WHERE `id` = ?';
        \$success = \$connection->execute(\$sql, [101]);
        
        // 動態(tài)生成必要的SQL,方法 delete
        \$success = \$connection->delete(
            'robots',
            'id = ?',
            [
                101,
            ]
        );
</pre>
html;

        echo "<hr>";
        echo "<h1>學習phql,方法先createQuery,再 execute</h1>";
        $query = $this->modelsManager->createQuery('SELECT * FROM '.Cars::class);
//        $query = $this->modelsManager->createQuery('SELECT * FROM '.Cars::class);
        $cars  = $query->execute();
        var_dump($cars->toArray());

        echo "<h1>學習phql,方法 直接executeQuery</h1>";
        $cars = $this->modelsManager->executeQuery('SELECT * FROM Apps\Models\Entities\Brands');
        var_dump($cars->toArray());

        echo "<h1>學習phql,方法 帶綁定參數(shù)</h1>";
        $query = $this->modelsManager
            ->createQuery('SELECT * FROM Apps\Models\Entities\Brands where name= :name: ');
        $cars  = $query->execute(['name'=>'寶馬']);
        var_dump($cars->toArray());

        echo "<h1>學習phql,方法 直接執(zhí)行,帶綁定參數(shù)</h1>";
        $cars = $this->modelsManager
            ->executeQuery('SELECT * FROM Apps\Models\Entities\Brands where name= :name: ',['name'=>'寶馬']);
        var_dump($cars->toArray());

        echo "<h1>學習phql,方法 不查整個對象,查標量</h1>";
        $cars = $this->modelsManager->executeQuery(
            'SELECT b.name FROM 
              Apps\Models\Entities\Brands as b
              ORDER BY b.name'
            ,['name'=>'寶馬']
        );
        var_dump($cars->toArray());

        echo "<h1>學習phql,查詢標量和對象混合體</h1>";
        $phql = 'SELECT c.price*0.1 AS taxes, c.* FROM Apps\Models\Entities\Cars AS c ORDER BY c.name';

        $cars = $this->modelsManager->executeQuery($phql);
        foreach($cars as $v){
            echo "汽車名稱:".$v->c->name.", 價格修正". $v->taxes."<br>";
        }

        echo "<h1>學習phql,使用外連接</h1>";
        $manager = $this->modelsManager;
        $phql = 'SELECT c.*, b.* FROM Apps\Models\Entities\Cars as c 
        LEFT JOIN Apps\Models\Entities\Brands as b';
        $cars = $manager->executeQuery($phql);
        foreach($cars as $v){
            echo "汽車名稱:".$v->c->name.", 品牌名稱". $v->b->name."<br>";
        }

        // 也可以手動設(shè)置 on 的條件。
        $phql = 'SELECT Cars.*, Brands.* FROM Cars INNER JOIN Brands ON Brands.id = Cars.brands_id';
        //$rows = $manager->executeQuery($phql);

        echo "<h1>使用聚合</h1>";
        // 所有車的價格是多少?
        $phql = 'SELECT SUM(price) AS summatory FROM Apps\Models\Entities\Cars';
        $row  = $manager->executeQuery($phql)->getFirst();
        echo $row['summatory'];

        echo "<h1>使用每個品牌有多少輛汽車,group by</h1>";
        // 每個品牌有多少輛汽車?
        $phql = 'SELECT b.name, COUNT(*) as count 
           FROM Apps\Models\Entities\Cars as c
            left join
            Apps\Models\Entities\Brands as b 
           on b.id = c.brand_id
           GROUP BY  b.name';
        $rows = $manager->executeQuery($phql);
        foreach ($rows as $row) {
            echo  $row->name,'有',  $row->count, "<br>";
        }
        
        echo "<h1>使用phal的批量更新,將觸發(fā)事件,確認更新失敗將全部失敗。</h1>";
        $phql ="update Apps\Models\Entities\Cars SET price=5";
        $result = $manager->executeQuery($phql);
        if ($result->success() === false) {
            $messages = $result->getMessages();
            foreach ($messages as $message) {
                echo $message->getMessage()."<br>";
            }
        }

        echo "<h1>使用查詢生成器,查全部</h1>";
        $robots = $this->modelsManager->createBuilder()
            ->from('Apps\Models\Entities\Cars')
            ->join('Apps\Models\Entities\Brands')
            ->orderBy('Apps\Models\Entities\Cars.id')
            ->limit(2, 0)
            ->getQuery()
            ->execute();
        var_dump($robots->toArray());

        echo "<h1>使用查詢生成器,查一行</h1>";
        $robots = $this->modelsManager->createBuilder()
            ->from('Apps\Models\Entities\Cars')
            ->join('Apps\Models\Entities\Brands')
            ->orderBy('Apps\Models\Entities\Brands.name')
            ->getQuery()
            ->getSingleResult();
        var_dump($robots->toArray());

        echo "<h1>使用查詢生成器,模擬實際后臺帶條件查詢,占位符使用,在條件中由php拼接。</h1>";
        $builder = $this->modelsManager->createBuilder();
        $builder->from('Apps\Models\Entities\Cars')
            ->where('style = :style:', ['style' => 'style2']);
        $result = $builder->getQuery()->execute();
        var_dump($result->toArray());

        echo "<h1>使用查詢生成器,模擬實際后臺帶條件查詢,占位符使用,在查詢中,由mysql拼接</h1>";
        $builder = $this->modelsManager->createBuilder();
        $builder->from('Apps\Models\Entities\Cars')
            ->where('style = :style:');
        $result = $builder->getQuery()->execute(['style' => 'style2']);
        var_dump($result->toArray());

        echo "<h1>轉(zhuǎn)義保留字</h1>";
        $phql   = 'SELECT id, [Like] FROM Posts';
        
        
        echo "<h1>分頁實現(xiàn)</h1>";
        $builder = $this->modelsManager->createBuilder()
            ->from('Apps\Models\Entities\Cars')
            ->orderBy('name');
        $options = [
            'builder' => $builder,
            'limit'   => 2,
            'page'    => 1,
            'adapter' => 'queryBuilder',
        ];

        $paginator = Factory::load($options);
        $page = $paginator->getPaginate();
        var_dump($page->items->toArray());
        echo "總共".$page->total_pages. '條記錄<br>';
        echo "總共".$page->total_items. '頁<br>';




        // 指定表名
//        public function initialize()
//    {
//        $this->setSource('toys_robot_parts');
//    }
        // onConstruct()方法

        // 模型新增
//        $robot = new Robots();
//
//        $result = $robot->create(
//            [
//                'type' => 'mechanical',
//                'name' => 'Astro Boy',
//                'year' => 1952,
//            ]
//        );
        // if $result===false;

        // 模型更新
        //  $result =      $robot->update(
//            [
//                'type' => 'mechanical',
//                'name' => 'Astro Boy',
//                'year' => 1952,
//            ]
//        );
        // if $result ===false;

        // findFirst標準寫法。
//        $robot = Robots::findFirst(11);
//
//        if ($robot !== false) {




        // 新增記錄,后,用如下方法獲得主鍵
//        $robot->save();
//
//        echo 'The generated id is: ', $robot->id;
        // 另外,模型類,可以單獨設(shè)置主鍵字段名稱!

        // 必須設(shè)置此方法。
        //$this->useDynamicUpdate(true);

        // $this->setSchema('toys');
        // 模型可以映射到不同的庫名。

        //關(guān)系中,使用魔術(shù)方法get是有好處的??!原因是可以 直接加條件再過濾??!
        // 定義關(guān)系時,竟然可以直接定義過濾條件??!
        // 定義關(guān)系時,可以設(shè)置成強制檢查!!。這樣比較好哎。

        // 模型關(guān)系批量處理,方便阿!
//        $robots->getParts()->update(
//            [
//                'stock'      => 100,
//                'updated_at' => time(),
//            ]
//        );


       // $result = $manager->executeQuery($phql);

//        CREATE TABLE cars (
//        id int(11) NOT NULL AUTO_INCREMENT,
//  name varchar(191) DEFAULT '' COMMENT '1',
//  brand_id int not null default 0 comment '品牌id',
//  price decimal(10,2) not null default 0 comment 'price',
//  year int not null default 0 comment '2',
//  style varchar(191) not null default '' comment '3',
//  type varchar(191) not null default '' comment '4',
//  PRIMARY KEY (id),
//  index brand_id(brand_id),
//  index type(type),
//  index style(style)
//) ENGINE=InnoDB  DEFAULT CHARSET=utf8mb4 COMMENT='測試用表'

//        insert into cars(name,brand_id, price,year,style,type)values(
//        'ao1',1,10000,1974,'style1','style1'
//    );
//insert into cars(name,brand_id, price,year,style,type)values(
//        'ao2',1,20000,1974,'style2','style2'
//    );
//insert into cars(name,brand_id, price,year,style,type)values(
//        'b1',1,30000,2000,'style3','style3'
//    );
//insert into cars(name,brand_id, price,year,style,type)values(
//        'b2',1,40000,3000,'style4','style4'
//    );
暴雪 12170aa
火狐截圖_2019-12-12T09-11-29.461Z.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容