Tp5の予備検討 ThinkPHP5の注意事項(Tp3書き込み対応)

each() メソッドは php7.2 以降で廃止され、プロジェクトで使用されている場所で次のエラーが表示されます。

 
each() 関数は非推奨です。このメッセージは、以降の通話では抑制されます 

 解決。それは簡単です:
 

while(list($key,$val)=each($array)) { 
#code
}
変更:

foreach($array as $key => $val) { #code }

元のリンク: https://blog.csdn.net/happyzhlb/article/details/125395508

db() 関数はモデル model では使用できません。これは、モデル内の組み込み db() 関数と競合します。.    


【复杂的sql语句(Abiaok)】
======================================== ==============================
    $data = M('recharge_coin')
        ->field('coin_id,recharge_amount,total_amount ,title,sku')
        ->where($where)
        #->where('app_name','in',['vfans','vfans1','all']) ->
        where(['app_name'=> [['eq','vfans'],['eq','all'],'or']]) //または条件的写法->order('
        recharge_amount asc')->limit(10)-> order('sort_order asc')
        ->select();
    if(input('debug')=='true'){ echo M()->getLastSql(); }


    if (isset($data['audit_order']) && $data['audit_order'] != '') {             if ($data['audit_order'] == 'desc') {                 $order = 'v.audit_time desc ';             } else {                 $order = 'v.audit_time asc';             $         query-      >where('v.is_delete',0);






        

    $query->join('user u', 'v.user_id=u.user_id', 'LEFT');
    $query->order($order);

    $result = $query->paginate(20, false, [
        'query' => $data
    ]);


    $where['u.mobile'] = ['exp','like "%'.$mobile.'%" または manager_user like "%'.$mobile.'%"']; 等同: $
    query-
    > whereLike('u.mobile|u.manager_user', "%{$mobile}%");
    

【複雑なSQL文2】
    public function hello6()
    {         //$result = Db::name('data')->where('id', 4)->find();         // と書ける >= < = <> in [4,5,6,7,8] 'between', [5, 8]             $result = Db::name('data')->where('id','before', [ 1 ,9])->select();             print_r($result);         //フィールドが NULL かどうかを問い合わせる             $result = Db::name('data')                 ->where('name', 'null')                 - >select();             print_r($result);                     // 元の SQL ステートメント式             $result = Db::name('data')->where('id','exp ', "> 1 and name = '111'")->select();             print_r($result);         //複数のフィールドを持つクエリ:

        



        





                
                



        
        

            $result = Db::name('data')
                    ->where('id', '>=', 1)
                    ->where('name', 'like', '%php%')
                    ->select() ;
            print_r($result);   
            
            
         // または
            $result を使用 = Db::name('data')
                ->where([
                    'id' => ['>=', 1],
                    'name' => ['like ', '%think%'],
                ])->select();
            print_r($result);          
            
            
        // 複雑な使い方をもう一度見てみましょう。OR と AND を使用して
            $result = Db::name('data' )        
                ->どこで('
                name', 'like', '%think%') ->where('id', ['in', [1, 2, 3]], ['>=', 1], 'or')
                ->limit(2)
                ->select();
            print_r($結果);           
              
              
        // 批量查询
            $result = Db::name('data')
                ->where([
                    'id' => [['in', [1, 2, 3]], ['>=', 1], 'or'],
                    'name' => ['like', '%php%'],
                ])
                ->limit(10)
                ->select();
            print_r($結果);   


         //快捷查询
            $result = Db::name('data')
                ->where('id&status', '>', 0)
                ->limit(10)
                ->select();
            print_r($結果);          
 
            $result = Db::name('data')
                    ->where('id|status', '>', 0)   
                ->limit(10)
                ->select();
            print_r($結果);            
        
       
    }
    
    

[複雑な sql ステートメント 3 - クロージャー メソッドの使用]

tp5 で使用する闭包の方法:
 
$map['user_id']=1;
 
$map['ステータス']=0;
 
$or_map['user_id']=$map['user_id'];
 
$or_map['audit']=['in',['1,2']];
 
$list = Db::name('table')->where(function ($query) use ($map) {                     $query->where($map);                 })->whereOr(function ($query) use ( $or_map) {                     $query->where($or_map);                 })->select(); // 生成された sql 句: //SELECT * FROM `tp_table` WHERE ( `user_id` = '1' AND `status` = 0 ) OR ( `user_id` = '1' AND `audit` IN ('1,2 ') )
 

 

 

 

 

 

 

【複雑なSQL文4 - よくあるやり方】 

$where = [ 
    'id' => ['eq',5] ,
    'status' => [ ['eq',1] , [ 'eq',2 ] , [ 'eq',3 ] , 'or' ] , 
];
 
$value = DealSpace::where($where)->count();
 
//最後のクエリ条件は where feed_uid=5 and (status=1 or status =2 or status =3 ) です

測定:

$id = セッション::get('id');
$where = [
    'i.tp_id'=>[['eq',$id],['eq',0],'or'], '
    i.status'=>['eq',1]
];
$params = Db::table("ad_img")->alias('i')
    ->join('user u','i.id=u.id','left')
    ->field('i. image,u.username,u.id,u.mobile,u.ip')
    ->where($where)
    ->select(false);
    
    

【結果を配列に出力】

$result->toArray();

$result->toItems();

例: 

<?php
名​​前空間 app\admin\model\report;
think\Model を使用します。
class ReportPeos extends Model
{     保護された $table = 'report_peo';     保護された $pk = 'id';     保護された $field = true;


    /** クエリ リスト
     * #$data['begin_time']= $data['end_time'] = '20220823';
     */
    public function getList($data){

        //日付で検索、デフォルトは今日
        $today = date('Ymd');

        if(isset($data['begin_time']) && isset($data['end_time'])) {             $where['create_date'] = ['before',[$data['begin_time'],$data[ '終了時間']]];         }else{             $where['create_date'] = ['before',[$today,$today]];         }



        $where['biz_code'] = 'all';
        if(isset($data['biz_code']) && $data['biz_code'] <>'') $where['biz_code'] = $data['biz_code'];


        //モデル オブジェクト
        $query = $this->field('*')->where($where);

        $order = "create_date desc";
        $query->order($order);
        $result = $query->paginate(config('page'),false,$config = ['query'=>$data]);

        //変更項目
        $result->each(function($item, $key){             $item['nick_name'] = M('user')->where('user_id',$item['user_id'])- >value('ニックネーム');         });

        //累计金额
        $total_fee = $this->where($where)->sum('total_fee');
        $result->total_fee = $total_fee;

        if($result) return $result;
        戻る [];
    }
}
 

【挿入データベースはモデルを使用する必要があります】
------------------------------------------- - ------------------------------------------
$ro_id = model('rechargeOrder ')-> insert($data); //影響の数を返す: 成功 1、失敗 0
$ro_id = model('rechargeOrder')->insert($data,false,true); //主キー ID を返す、失敗偽?


データベースの更新: モデルは更新と保存をサポートしますが、データベースは更新メソッドのみをサポートします
----------------------------------- -------------------------------------------------- -
db( 'user')->where(array('user_id'=>$user_id))->update(array('is_vip'=>1)); model('user')->where(array(' user_id'
= >$user_id))->save(array('is_vip'=>1));

model('user')->where(array('user_id'=>$user_id))->allowField(true)->isUpdate(true)->save(array('is_vip'=>1));

 [allowField]: 更新が許可されているフィールド (真のデータベース一致フィールド)
 
 [isUpdate]: true-update; false-new;


[データテーブルの最後の主キーIDを取得]
-------------------------------------- ---- ---------------------------------------------
$ro_id = データベース: :name('rechargeOrder')->getLastInsID();


Create メソッドは直接データを挿入します (最新の主キー ID を生成します): (TP3 は検証のみを実行し、データを挿入しません)
------------------------ ---- -------------------------------------------------- ---- -----
$id = $withdraw_mod->create($data)->getLastInsID()


[SQL ステートメントを出力するいくつかの方法]
----------------------------------------- - -----------------------------------------
1. Db::table(' ' )->getLastSql(); 最後に実行された SQL ステートメント

2. Db::table('user')->fetchSql()->find(); 実行するSQL文

    これを直接出力することはできません。エラーになります (追加 ->find() または ->select()):
    echo $query->fetchSql(); エラー: クラス think\db\Query のオブジェクトを変換できませんでした
    
$res = Db::table('user')->where('id','>',1)->select(false); halt (
   $res);

4. $res = Db::table('user')->where('id','>',1)->buildSql();
   停止($res);

【TP3対応のM()メソッド】
---------------------------------------------- ---------------------------------------------
関数 M($table ='' ){     return \think\Db::table($table); }

 【Thinkphp5 mysqlが文字列型を返す_mysqlが返すフィールド値が全て文字列型になってしまう問題を解決する】
------------------------------------------ -- ------------------------------------------------ -- -------------------------------------- 

// 古い API と互換性があります /thinkphp/library/think/db/Connection.php 行 120 は、この変換文字列パラメーターを開きます: PDO::ATTR_STRINGIFY_FETCHES => true,

参考資料:https://blog.csdn.net/weixin_42681774/article/details/113261916

【thinkPHP5.0.5から5.0.24へバージョンアップ時の注意事項】
=================================== = ======================================= 
ifnull
select IFNULL(user_name, user_tel) as user_name from user ;(5.0.5)
ただし、アップグレード後は IFNULL は使用できません。両方のフィールドを調べて、自分で判断してください。

exp 
アップグレード前:
       $where['field'] = ['exp','expression']アップグレード
後 
       $where['field'] =Db::raw("expression") V5.0.17+ バージョン、SQL 使用時注文の並べ替えで関数を使用する場合は、order の代わりに orderRaw メソッドを使用してください。次に例を示します。

Db::table('think_user')->where('status=1')->orderRaw('rand()')->limit(5)->select()

I() -> 入力()

M() -> model() (最初にモデルを作成する必要がありますか?)

add() -> 挿入() 

保存() -> 更新()

getField() -> 値()

ヘルパー関数

5.0 ヘルパー関数とバージョン 3.2 の単一文字関数の比較は次のとおりです。

バージョン 3.2 -> バージョン 5.0

C config 
E exception 
G debug 
L lang 
T Deprecated 
I input 
N Deprecated 
D model 
M db 
A controller 
R action 
B Deprecated 
U url 
W widget 
S cache 
F Deprecated 

おすすめ

転載: blog.csdn.net/happyzhlb/article/details/123398061