ThinkPhp数据库查询

方法一:常规方法(适应于单表查询)
数据库

$Form = M("Form"); 
// 按照id排序显示前6条记录 
$list = $Form->order('id desc')->limit(6)->select(); 
$this->assign('list', $list); 
$this->display();
表单操作
$Form = D("Form");
if ($Form->create()) {
    if (false !== $Form->add()) {
        $this->success('数据添加成功!');
    } else {
        $this->error('数据写入错误');
    }
} else {
    header("Content-Type:text/html; charset=utf-8");
    exit($Form->getError() . ' [ <A HREF="javascript:history.back()">返 回</A> ]');
}

方法二:视图方法(适用于多表查询)

先在Model创建视图模型类BlogViewModel.class.php文件的部分代码:
class BlogViewModel extends ViewModel {
    public $viewFields = array(
        'Blog'=>array('id','name','title','keywords','description','cTime','categoryId','content','readCount','tags','commentCount','status'),
        'Category' => array('title'=>'category', '_on'=>'Blog.categoryId=Category.id')
    );
}
代码说明:
$viewFields:就是视图表的关联二维数组,每个数组说明结合的一个表;
'Category'  =>  array('title'=>'category', '_on'=>'Blog.categoryId=Category.id'),
这段代码中的'_on'就是表连接查询类似where条件,'title'=>'category'意思是在查询的结果以category访问对应的文章类别
title就是Category表要显示的字段,category是title字段显示的名称。等同于 title as category

在Action里面使用
$Blog = D("BlogView");     //调用视图模型类
$result = $Blog->where('Blog.id='.$id)->find();

方法三:表格方法

Table方法:定义要操作的数据表名称,可以动态改变当前操作的数据表名称,需要写数据表的全名,包含前缀,可以使用别名,例如:
$Model->Table('think_user user')
->where('status>1')
->select();

$Model->table('think_blog blog,think_type type')->where('blog.typeid=type.id')
->field('blog.id as id,blog.title,blog.content,type.typename as type')
->order('blog.id desc' )->limit(5)->select();
Table方法的参数支持字符串和数组,数组方式的用法:
$Model->Table(array('think_user'=>'user','think_group'=>'group'))
->where('status>1')
->select(); 
使用数组方式定义的优势是可以避免因为表名和关键字冲突而出错的情况。。
注:如果不定义table方法,默认会自动获取当前模型对应或者定义的数据表。

方法四:JOIN方法

查询Join支持,Join方法的参数支持字符串和数组,并且join方法是连贯操作中唯一可以多次调用的方法。例如:
$Model->join('work ON artist.id = work.artist_id')
->join('card ON artist.card_id = card.id')
->select();

//Left Join
$Model->table('user U')
->join('news N on U.id=N.cid')
->field('U.*,N.*')
->order('id desc')
->limit('8')
->findall();

默认采用LEFT JOIN 方式,如果需要用其他的JOIN方式,可以改成:

$Model->join('RIGHT JOIN work ON artist.id = work.artist_id') ->select();

//Right Join $Model->table('user U') ->join(array('right','news N on U.id=N.cid')) ->field('U.*,N.*') ->order('id desc') ->limit('8') ->findall();

如果join方法的参数用数组的话,只能使用一次join方法,并且不能和字符串方式混合使用。

$Model->join(array(' work ON artist.id = work.artist_id', 'card ON artist.card_id = card.id')) ->select()

 
方法五:原生查询

$Model = new Model();   $sql = 'select a.id,a.title,b.content from think_test1 as a, think_test2 as b where a.id=b.id '.$map.' order by a.id '.$sort.' limit '.$p->firstRow.','.$p->listRows; $voList = $Model->query($sql);

转载自:http://ht19820316.blog.163.com/blog/static/3395523320124103330707/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值