$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