CakePHP 3.2 数据库访问和ORM篇

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();
 




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

淋过雨的街头

你的鼓励是我创作的做大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值