美文网首页
thinkphp对数据库增删改查

thinkphp对数据库增删改查

作者: 狂山 | 来源:发表于2016-12-08 17:09 被阅读0次

    thinkphp对数据库增删改查进行了封装操作,使得使用更加方便,但是不一定灵活。

    可以用封装的用,需要写sql,可以执行sql。

    1.原始的

    $Model =newModel();//实例化一个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是前缀。

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

    另一种写法,_可以写成大写,它会自动转化成_

    $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语句

    $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语句

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

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

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

    $model= M('WxuserCollection');$res=$model- >where('id=1') - >delete();//成功返回1 失败返回0

    根据条件进行删除操作

    7.field()

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

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

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

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

    获取某个字段值

    $User= M("User");//实例化User对象

    // 获取ID为3的用户的昵称$nickname=$User->where('id=3')->getField('nickname');

    返回的nickname是一个字符串结果。也就是说,即使有满足条件的多个字段,也只会返回一个结果。

    获取某个字段列

    如果希望返回符合要求的字段列(多个结果),可以使用:

    $User= M("User");//实例化User对象

    // 获取status为1的用户的昵称列表$nickname=$User->where('status=1')->getField('nickname',true);

    第二个参数传入了true,返回的nickname则是一个数组,包含了所有满足条件的昵称列表。

    如果需要限制返回结果数量,可以使用:

    $nickname=$User->where('status=1')->getField('nickname',8);

    获取2个字段列表

    $User= M("User");//实例化User对象

    // 获取status为1的用户的昵称列表$nickname=$User->where('status=1')->getField('id,nickname');

    如果getField方法传入多个字段名称的话,默认返回一个关联数组,以第一个字段的值为索引(所以第一个字段要尽量选择不会重复的)。

    获取多个字段列表

    $result=$User->where('status=1')->getField('id,account,nickname');

    如果传入了2个以上的字段名,则返回一个二维数组(类似select方法的返回值,区别在于索引是二维数组的键名是第一个字段的值)

    综合使用案例

    $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();//获取当前页的记录echoM()->getLastSql();//调试sql语句用$count=$this->collectModel->table("sh_wxuser_collection a")->where($where)->count();//获取总的记录数

    这里由于结合了两张表,所以用到了table方法,重新定义表名,相应的条件和参数都要加上前缀。a. 或者b.

    其中field字段要么是一个字符串,要么是数组。

    field('b.name', 'b.price', 'b.oprice', 'b.logoimg', 'a.goods_id') //错误

    我之前就这么写,问题大大的。

    使用框架,就不能灵活的写sql了。不过对sql有一个深刻的认识,也有利于灵活的使用好框架。

    用于调试sql语句的方法。

    echo M()->getLastSql();

    很方便。

    相关文章

      网友评论

          本文标题:thinkphp对数据库增删改查

          本文链接:https://www.haomeiwen.com/subject/oxusmttx.html