本文实例讲述了thinkPHP数据库增删改查操作方法。分享给大家供大家参考,具体如下:
thinkphp对数据库增删改查进行了封装操作,使得使用更加方便,但是不一定灵活。
可以用封装的用,需要写sql,可以执行sql。
1.原始的
1
2
3
|
$Model = new Model(); // 实例化一个model对象 没有对应任何数据表
$insert_sql = "INSERT INTO sh_wxuser_collection (user_id,store_id,good_id,addtime) VALUES('" . $user_id . "','" . $store_id . "','" . $good_id . "','" . $addtime . "');" ;
$Model - >query( $insert_sql );
|
2.针对表实例化的,这里的表原名是sh_wxuser_collection。sh是前缀。
1
2
3
|
$model = M( 'wxuser_collection' ); //自动省去sh
$insert_sql = "INSERT INTO __TABLE__ (user_id,store_id,good_id,addtime) VALUES('" . $user_id . "','" . $store_id . "','" . $good_id . "','" . $addtime . "');" ;
$model - >query( $insert_sql );
|
另一种写法,_可以写成大写,它会自动转化成_
1
2
3
|
$model = M( 'WxuserCollection' ); //自动省去sh
$insert_sql = "INSERT INTO __TABLE__ (user_id,store_id,good_id,addtime) VALUES('" . $user_id . "','" . $store_id . "','" . $good_id . "','" . $addtime . "');" ;
$model - >query( $insert_sql );
|
3. 封装的add语句
1
2
3
|
$model = M( 'WxuserCollection' );
$data = array ( 'user_id' = > $user_id , 'store_id' = > $store_id , 'good_id' = > $good_id , 'addtime' = > $addtime );
$model - >data( $data ) - >add();
|
4.封装的修改edit语句
1
2
3
|
$model = M( 'WxuserCollection' );
$data = array ( 'user_id' = > $user_id , 'store_id' = > $store_id , 'good_id' = > $good_id , 'addtime' = > $addtime );
$model - >data( $data ) - >where( 'id=3' ) - >save();
|
确实挺方便的,但是方便之余,别忘了原始的sql,原汁原味的sql,才最有意思。
5.find()
1
2
3
4
|
$model = M( 'WxuserCollection' );
$res1 = $model - >find(1);
$res2 = $model - >find(2);
$res3 = $model - >where( 'good_id=1105 AND store_id = 1 AND user_id = 20' ) - >find();
|
find获取一条数据,find(1)获取id为1的数据,find(2)获取id为2的数据。最后一个是获取条件为where的中的第一条数据。
5.select()
1
2
|
$model = M( 'WxuserCollection' );
$res = $model - >where( 'good_id=1105 AND store_id = 1 AND user_id = 20' ) - >field( 'id,good_id as good' ) - >select();
|
获取所有数据。这里的好处就是,不用考虑sql语句的顺序了,随心所欲调用函数就可以了。
6.delete()
1
2
|
$model = M( 'WxuserCollection' );
$res = $model - >where( 'id=1' ) - > delete (); // 成功返回1 失败返回0
|
根据条件进行删除操作
7.field()
1
2
3
4
|
$model = M( 'WxuserCollection' );
$res = $model - >field( 'id,good_id as good' ) - >select();
$res = $model - >field( array ( 'id' , 'good_id' = > 'good' )) - >select();
$res = $model - >field( 'id' , true) - >select();
|
字符串,数组两种方式,第三个是表示获取处理id之外的所有字段。
8.order()
1
2
3
4
5
|
$model = M( 'WxuserCollection' );
$res = $model - >order( 'id desc' ) - >select();
$res = $model - >order( 'id asc' ) - >select();
$res = $model - >order( array ( 'id' = > 'desc' )) - >select();
$res = $model - >order( array ( 'id' )) - >select();
|
字符串,数组两种方式,默认asc。
9.join()
1
2
3
|
$Model ->join( ' work ON artist.id = work.artist_id' )->join( 'card ON artist.card_id = card.id' )->select();
$Model ->join( 'RIGHT JOIN work ON artist.id = work.artist_id' )->select();
$Model ->join( array ( ' work ON artist.id = work.artist_id' , 'card ON artist.card_id = card.id' ))->select();
|
默认采用LEFT JOIN 方式,如果需要用其他的JOIN方式,可以改成第二种,
如果join方法的参数用数组的话,只能使用一次join方法,并且不能和字符串方式混合使用。
10.setInc()
1
2
3
4
5
|
$User = M( "User" ); // 实例化User对象
$User ->where( 'id=5' )->setInc( 'score' ,3); // 用户的积分加3
$User ->where( 'id=5' )->setInc( 'score' ); // 用户的积分加1
$User ->where( 'id=5' )->setDec( 'score' ,5); // 用户的积分减5
$User ->where( 'id=5' )->setDec( 'score' ); // 用户的积分减1
|
11.getField()
获取某个字段值
1
2
3
|
$User = M( "User" ); // 实例化User对象
// 获取ID为3的用户的昵称
$nickname = $User ->where( 'id=3' )->getField( 'nickname' );
|
返回的nickname是一个字符串结果。也就是说,即使有满足条件的多个字段,也只会返回一个结果。
获取某个字段列
如果希望返回符合要求的字段列(多个结果),可以使用:
1
2
3
|
$User = M( "User" ); // 实例化User对象
// 获取status为1的用户的昵称列表
$nickname = $User ->where( 'status=1' )->getField( 'nickname' ,true);
|
第二个参数传入了true,返回的nickname则是一个数组,包含了所有满足条件的昵称列表。
如果需要限制返回结果数量,可以使用:
1
|
$nickname = $User ->where( 'status=1' )->getField( 'nickname' ,8);
|
获取2个字段列表
1
2
3
|
$User = M( "User" ); // 实例化User对象
// 获取status为1的用户的昵称列表
$nickname = $User ->where( 'status=1' )->getField( 'id,nickname' );
|
如果getField方法传入多个字段名称的话,默认返回一个关联数组,以第一个字段的值为索引(所以第一个字段要尽量选择不会重复的)。
获取多个字段列表
1
|
$result = $User ->where( 'status=1' )->getField( 'id,account,nickname' );
|
如果传入了2个以上的字段名,则返回一个二维数组(类似select方法的返回值,区别在于索引是二维数组的键名是第一个字段的值)
综合使用案例
1
2
3
4
|
$where = array ( 'a.store_id' => $this ->store_id, 'a.user_id' => $this ->user_id);
$collects = $this ->collectModel->table( "sh_wxuser_collection a" )->field( array ( 'b.name' , 'b.price' , 'b.oprice' , 'b.logoimg' , 'a.goods_id' ))->limit( $start , $offset )->order( 'a.addtime DESC' )->where( $where )->join( ' sh_goods b ON a.goods_id = b.id' )->select(); // 获取当前页的记录
echo M()->getLastSql(); // 调试sql语句用
$count = $this ->collectModel->table( "sh_wxuser_collection a" )->where( $where )-> count (); // 获取总的记录数
|
这里由于结合了两张表,所以用到了table方法,重新定义表名,相应的条件和参数都要加上前缀。a. 或者b.
其中field字段要么是一个字符串,要么是数组。
1
|
field( 'b.name' , 'b.price' , 'b.oprice' , 'b.logoimg' , 'a.goods_id' ) // 错误
|
我之前就这么写,问题大大的。
使用框架,就不能灵活的写sql了。不过对sql有一个深刻的认识,也有利于灵活的使用好框架。
用于调试sql语句的方法。
1
|
echo M()->getLastSql();
|
很方便。
希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。