Cake数据库访问
1.简单查询案例
CakePHP3.X的语法不同于2.0的语法,随着PHP的升级,CakePHP的语法更加的近似于TP等一些框架的语法
use Cake\ORM\TableRegistry;
$articles = TableRegistry::get('Articles');
$query = $articles->find();
foreach ($query as $row) {
echo $row->title;
}
当在控制器内操作数据库的查询等操作必须引入 use Cake\ORM\TableRegistry; 只有这样这样才能对表、对应的MODEL接口进行操作.
当我们想调用Table.phpMODEL文件,必须先写一下引入模板
$articles = TableRegistry::get('Access');
2.条件查询
$articles = TableRegistry::get('Access')->where('id'=>'1')
和20版本一样3.0也具备查询数量的方法封装
$articles = TableRegistry::get('Access')->where('id'=>'1')->first();
<pre name="code" class="php">$articles = TableRegistry::get('Access')->where('id'=>'1')->all();
这样查出来的数据无论在页面调试和调用的时候都会遇到不小的麻烦,因为这样查出来的数据不会看到好多数据是调试信息,而有的数据是为了保护也根本取不到,那么我们用toArray()方法进行装换一下
<pre name="code" class="php">$articles = TableRegistry::get('Access')->where('id'=>'1')->all()->toArray();
3.联合查询
首先介绍一下简单的两表查询,cake3.0关联表查询方法有很多,但是因为用习惯了2.0的原因,自己比较喜欢下面这种
$query = $articles->find()
->hydrate(false)
->join([
'table' => 'comments',
'alias' => 'c',
'type' => 'LEFT',
'conditions' => 'c.article_id = articles.id',
]);
当多添加关联的时候
$query = $articles->find()
->hydrate(false)
->join([
'c' => [
'table' => 'comments',
'type' => 'LEFT',
'conditions' => 'c.article_id = articles.id',
],
'u' => [
'table' => 'users',
'type' => 'INNER',
'conditions' => 'u.id = articles.user_id',
]
]);
4.插入数据
3.0的插入数据也有多种,下面介绍下其中的两种
1.这种方法是对象的写法,先创建一个实体
$res=TableRegistry::get('Allgroups');
$article=$res->newEntity();
$article->mcd='asdf';
$res->save($article);
2.配合表查询的插入
$select = $articles->find()
->select(['title', 'body', 'published'])
->where(['id' => 3]);
$query = $articles->query()
->insert(['title', 'body', 'published'])
->values($select)
->execute();
5.更新数据
封装好的SQL执行法通用都是用“->”来调用的
<pre name="code" class="php">$res=TableRegistry::get('Allgroups');
$query = $res
->query()
->update()
->set(['status'=>'2')
->where(['id'=>1])
->execute();
6.删除数据
<pre name="code" class="php"><pre name="code" class="php">$res=TableRegistry::get('Allgroups');
$query = $res->query();$query
->delete()->where(['id' => $id])->execute();