thinkphp lists todo

news2024/11/20 12:40:09

来由:

数据库的这个字段我想返回成:

新奇的写法如下:

逻辑层的代码:

  public function goodsDetail($goodId)
    {
        $detail = $this->good->where('id', $goodId)->hidden(['type_params','user_id'])->find();
        if (!$detail) {
            return $this->fail("获取数据失败!");
        }
        if ($detail->type === 1) {

            //特殊的写法
            $detail->award_lists = '';
        } else if ($detail->type === 2) {
            $number_group_buyer = Order::where('good_id', $goodId)->where('status',1)->count('id');
            $detail->number_group_buyers = $number_group_buyer;
        }

        return $this->success("获取数据成功", $detail);

    }

模型层的代码:

<?php

namespace app\daogou\model;

use app\common\model\TimeModel;

class Goods extends TimeModel
{
    protected $table = 'dg_goods';

    protected $type = [
        'type_params'=>'json',
    ];



    //type_params:
    //      type = 1 : [['coin_id'=>1,'award'=>"0.80000000"],……]
    //      type = 2 : ['max_number'=>10,'winner'=>1]
    //      type = 3 : null

    public function user()
    {
        return $this->hasOne('user','user_id','id')->bind(['username']);
    }

    public function getStatusTxtAttr($v,$data)
    {
        //状态(-1:下架,1:上架,2:交易中)
        $status = [-1=>"下架",1=>"上架",2=>"交易中"];
        if(array_key_exists('status',$data)){
            return array_key_exists($data['status'],$status) ? $status[$data['status']] : $data['status'];
        }
        return '';
    }


    public function getPriceAttr($v)
    {
        return delZero($v);
    }
    public function getTypeTxtAttr($v,$data){
        //(1:奖购2:团购,3:闪购)
        $status = [1=>"奖购",2=>"团购",3=>"闪购"];
        if(array_key_exists('type',$data)){
            return array_key_exists($data['type'],$status) ? $status[$data['type']] : $data['type'];
        }
        return '';
    }




// 不理解的代码
    public function getAwardListsAttr($v, $good)
    {
        $awardLists = [];
        if ($good['type'] === 1) {
            $type_params = json_decode($good['type_params'],true);
            foreach ($type_params as $propertyId => $properNumber) {
                $propertyName = Coin::where('id', $propertyId)->value('name');
                $award['asset_name'] = $propertyName;
                $award['asset_number'] = $properNumber;
                array_push($awardLists,$award);
            }
        }
        return $awardLists;
    }



}

可以通过  :

$ba = debug_backtrace();
var_dump($ba);
die();

来查看执行的流程,,流程如下(个人感觉看起来 【展示的效果】 不是很友好 很乱的感觉 ):

array(8) {
  [0]=>
  array(7) {
    ["file"]=>
    string(66) "D:\wwwroot\yyex\thinkphp\library\think\model\concern\Attribute.php"
    ["line"]=>
    int(500)
    ["function"]=>
    string(17) "getAwardListsAttr"
    ["class"]=>
    string(22) "app\daogou\model\Goods"
    ["object"]=>
    object(app\daogou\model\Goods)#58 (2) {
      ["data"]=>
      array(14) {
        ["id"]=>
        int(14)
        ["user_id"]=>
        int(2)
        ["type"]=>
        int(1)
        ["name"]=>
        string(14) "仙侠小说ss"
        ["photo"]=>
        string(20) "http://ff12.ffsky.cn"
        ["price"]=>
        string(6) "102.30"
        ["introduction"]=>
        string(5) "ccsss"
        ["phone"]=>
        string(11) "13246885231"
        ["type_params"]=>
        string(9) "{"20":22}"
        ["status"]=>
        int(1)
        ["create_time"]=>
        int(1701844614)
        ["update_time"]=>
        int(1701844614)
        ["remark"]=>
        NULL
        ["award_lists"]=>
        string(0) ""
      }
      ["relation"]=>
      array(0) {
      }
    }
    ["type"]=>
    string(2) "->"
    ["args"]=>
    array(2) {
      [0]=>
      string(0) ""
      [1]=>
      array(14) {
        ["id"]=>
        int(14)
        ["user_id"]=>
        int(2)
        ["type"]=>
        int(1)
        ["name"]=>
        string(14) "仙侠小说ss"
        ["photo"]=>
        string(20) "http://ff12.ffsky.cn"
        ["price"]=>
        string(6) "102.30"
        ["introduction"]=>
        string(5) "ccsss"
        ["phone"]=>
        string(11) "13246885231"
        ["type_params"]=>
        string(9) "{"20":22}"
        ["status"]=>
        int(1)
        ["create_time"]=>
        int(1701844614)
        ["update_time"]=>
        int(1701844614)
        ["remark"]=>
        NULL
        ["award_lists"]=>
        string(0) ""
      }
    }
  }
  [1]=>
  array(7) {
    ["file"]=>
    string(67) "D:\wwwroot\yyex\thinkphp\library\think\model\concern\Conversion.php"
    ["line"]=>
    int(179)
    ["function"]=>
    string(7) "getAttr"
    ["class"]=>
    string(11) "think\Model"
    ["object"]=>
    object(app\daogou\model\Goods)#58 (2) {
      ["data"]=>
      array(14) {
        ["id"]=>
        int(14)
        ["user_id"]=>
        int(2)
        ["type"]=>
        int(1)
        ["name"]=>
        string(14) "仙侠小说ss"
        ["photo"]=>
        string(20) "http://ff12.ffsky.cn"
        ["price"]=>
        string(6) "102.30"
        ["introduction"]=>
        string(5) "ccsss"
        ["phone"]=>
        string(11) "13246885231"
        ["type_params"]=>
        string(9) "{"20":22}"
        ["status"]=>
        int(1)
        ["create_time"]=>
        int(1701844614)
        ["update_time"]=>
        int(1701844614)
        ["remark"]=>
        NULL
        ["award_lists"]=>
        string(0) ""
      }
      ["relation"]=>
      array(0) {
      }
    }
    ["type"]=>
    string(2) "->"
    ["args"]=>
    array(1) {
      [0]=>
      string(11) "award_lists"
    }
  }
  [2]=>
  array(7) {
    ["file"]=>
    string(67) "D:\wwwroot\yyex\thinkphp\library\think\model\concern\Conversion.php"
    ["line"]=>
    int(250)
    ["function"]=>
    string(7) "toArray"
    ["class"]=>
    string(11) "think\Model"
    ["object"]=>
    object(app\daogou\model\Goods)#58 (2) {
      ["data"]=>
      array(14) {
        ["id"]=>
        int(14)
        ["user_id"]=>
        int(2)
        ["type"]=>
        int(1)
        ["name"]=>
        string(14) "仙侠小说ss"
        ["photo"]=>
        string(20) "http://ff12.ffsky.cn"
        ["price"]=>
        string(6) "102.30"
        ["introduction"]=>
        string(5) "ccsss"
        ["phone"]=>
        string(11) "13246885231"
        ["type_params"]=>
        string(9) "{"20":22}"
        ["status"]=>
        int(1)
        ["create_time"]=>
        int(1701844614)
        ["update_time"]=>
        int(1701844614)
        ["remark"]=>
        NULL
        ["award_lists"]=>
        string(0) ""
      }
      ["relation"]=>
      array(0) {
      }
    }
    ["type"]=>
    string(2) "->"
    ["args"]=>
    array(0) {
    }
  }
  [3]=>
  array(5) {
    ["function"]=>
    string(13) "jsonSerialize"
    ["class"]=>
    string(11) "think\Model"
    ["object"]=>
    object(app\daogou\model\Goods)#58 (2) {
      ["data"]=>
      array(14) {
        ["id"]=>
        int(14)
        ["user_id"]=>
        int(2)
        ["type"]=>
        int(1)
        ["name"]=>
        string(14) "仙侠小说ss"
        ["photo"]=>
        string(20) "http://ff12.ffsky.cn"
        ["price"]=>
        string(6) "102.30"
        ["introduction"]=>
        string(5) "ccsss"
        ["phone"]=>
        string(11) "13246885231"
        ["type_params"]=>
        string(9) "{"20":22}"
        ["status"]=>
        int(1)
        ["create_time"]=>
        int(1701844614)
        ["update_time"]=>
        int(1701844614)
        ["remark"]=>
        NULL
        ["award_lists"]=>
        string(0) ""
      }
      ["relation"]=>
      array(0) {
      }
    }
    ["type"]=>
    string(2) "->"
    ["args"]=>
    array(0) {
    }
  }
  [4]=>
  array(4) {
    ["file"]=>
    string(56) "D:\wwwroot\yyex\thinkphp\library\think\response\Json.php"
    ["line"]=>
    int(36)
    ["function"]=>
    string(11) "json_encode"
    ["args"]=>
    array(2) {
      [0]=>
      *RECURSION*
      [1]=>
      int(256)
    }
  }
  [5]=>
  array(7) {
    ["file"]=>
    string(51) "D:\wwwroot\yyex\thinkphp\library\think\Response.php"
    ["line"]=>
    int(396)
    ["function"]=>
    string(6) "output"
    ["class"]=>
    string(19) "think\response\Json"
    ["object"]=>
    object(think\response\Json)#57 (8) {
      ["options"]=>
      array(1) {
        ["json_encode_param"]=>
        int(256)
      }
      ["contentType"]=>
      string(16) "application/json"
      ["data"]=>
      *RECURSION*
      ["charset"]=>
      string(5) "utf-8"
      ["code"]=>
      int(200)
      ["allowCache"]=>
      bool(true)
      ["header"]=>
      array(1) {
        ["Content-Type"]=>
        string(31) "application/json; charset=utf-8"
      }
      ["content"]=>
      NULL
    }
    ["type"]=>
    string(2) "->"
    ["args"]=>
    array(1) {
      [0]=>
      *RECURSION*
    }
  }
  [6]=>
  array(7) {
    ["file"]=>
    string(51) "D:\wwwroot\yyex\thinkphp\library\think\Response.php"
    ["line"]=>
    int(128)
    ["function"]=>
    string(10) "getContent"
    ["class"]=>
    string(14) "think\Response"
    ["object"]=>
    object(think\response\Json)#57 (8) {
      ["options"]=>
      array(1) {
        ["json_encode_param"]=>
        int(256)
      }
      ["contentType"]=>
      string(16) "application/json"
      ["data"]=>
      *RECURSION*
      ["charset"]=>
      string(5) "utf-8"
      ["code"]=>
      int(200)
      ["allowCache"]=>
      bool(true)
      ["header"]=>
      array(1) {
        ["Content-Type"]=>
        string(31) "application/json; charset=utf-8"
      }
      ["content"]=>
      NULL
    }
    ["type"]=>
    string(2) "->"
    ["args"]=>
    array(0) {
    }
  }
  [7]=>
  array(7) {
    ["file"]=>
    string(32) "D:\wwwroot\yyex\public\index.php"
    ["line"]=>
    int(18)
    ["function"]=>
    string(4) "send"
    ["class"]=>
    string(14) "think\Response"
    ["object"]=>
    object(think\response\Json)#57 (8) {
      ["options"]=>
      array(1) {
        ["json_encode_param"]=>
        int(256)
      }
      ["contentType"]=>
      string(16) "application/json"
      ["data"]=>
      *RECURSION*
      ["charset"]=>
      string(5) "utf-8"
      ["code"]=>
      int(200)
      ["allowCache"]=>
      bool(true)
      ["header"]=>
      array(1) {
        ["Content-Type"]=>
        string(31) "application/json; charset=utf-8"
      }
      ["content"]=>
      NULL
    }
    ["type"]=>
    string(2) "->"
    ["args"]=>
    array(0) {
    }
  }
}

2:异步消息队列:

tp6+异步任务队列+发送邮件+模型监听_tp6异步下载_Upordo的博客-CSDN博客

3:thinkphp6  + workman 实现即使聊天 通讯:

https://www.cnblogs.com/codehaoran/p/16817231.html

PHP聊天室框架workerman-chat

GitHub - walkor/workerman-chat: Websocket chat room written in PHP based on workerman.

前端聊天模板:lemon imui(gitee)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1294233.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LinuxBasicsForHackers笔记 -- 进程管理

进程是一个正在运行和使用资源的程序。 Linux 内核是操作系统的内核&#xff0c;几乎控制着一切&#xff0c;在创建进程时&#xff0c;它会按顺序为每个进程分配一个唯一的进程 ID (PID)。 查看进程 ps – 用于在命令行查看哪些进程处于活动状态。单独使用 ps 命令并不能真正…

线上盲盒扭蛋机,开启潮玩新玩法

盲盒近几年非常火爆&#xff0c;因其不确定性、随机性吸引着盲盒爱好者&#xff0c;引起了潮玩文化风潮。扭蛋机是盲盒的一种新抽取模式&#xff0c;线上扭蛋机小程序在具有盲盒的优势外&#xff0c;还具有较大吸引力&#xff0c;用户参与率较高&#xff0c;这也使得扭蛋机成为…

Spring 依赖注入的三种方式优缺点

小王学习录 前言属性注入1. 属性注入的优点2. 属性注入的缺点 Setter注入Setter注入的优点Setter注入的缺点 构造方法注入1. 构造方法的优点 总结补充Aurowired注解和Resource注解的区别 前言 在前面的文章中介绍了基于注解的方式将Bean存储到Spring中, 接下来介绍如何基于注解…

11.Java安卓程序设计-基于SSM框架的Android平台健康管理系统的设计与实现

摘要 随着人们生活水平的提高和健康意识的增强&#xff0c;健康管理系统在日常生活中扮演着越来越重要的角色。本研究旨在设计并实现一款基于SSM框架的Android平台健康管理系统&#xff0c;为用户提供全面的健康监测和管理服务。 在需求分析阶段&#xff0c;我们明确了系统的…

LLM微调(三)| 大模型中RLHF + Reward Model + PPO技术解析

本文将深入探讨RLHF&#xff08;Reinforcement Learning with Human Feedback&#xff09;、RM&#xff08;reward model&#xff09;和PPO&#xff08;Proximal Policy Optimizer&#xff09;算法的概念。然后&#xff0c;通过代码演示使用RLHF训练自己的大模型和奖励模型RM。…

上网监控软件——安全与隐私的平衡

网络已经成为人们生活和工作中不可或缺的一部分。然而&#xff0c;随着网络使用的普及&#xff0c;网络安全问题也日益突出。上网监控软件作为网络安全领域的一个重要组成部分&#xff0c;在保护企业和家庭网络安全方面发挥着重要作用。 本文将探讨上网监控软件的背景、功能、优…

Java第二十一章

一.网络程序设计基础 1.网络协议 网络协议规定了计算机之间连接的物理、机械(网线与网卡的连接规定)、电气(有效的电平范围)等特征&#xff0c;计算机之间的相互寻址规则&#xff0c;数据发送冲突的解决方式&#xff0c;长数据如何分段传送与接收等内容.就像不同的国家有不同的…

AI烟火识别智能视频分析系统解决方案

引言 随着城市化进程的加快和高科技的迅猛发展&#xff0c;传统的消防系统逐渐显露出局限性。在这种背景下&#xff0c;AI烟火识别智慧消防解决方案应运而生&#xff0c;它融合了最新的AI技术&#xff0c;旨在提高火灾的预防、检测、应对和控制能力&#xff0c;保护人民生命财…

Sbatch, Salloc提交任务相关

salloc 申请计算节点&#xff0c;然后登录到申请到的计算节点上运行指令&#xff1b; salloc的参数与sbatch相同&#xff0c;该部分先介绍一个简单的使用案例&#xff1b;随后介绍一个GPU的使用案例&#xff1b;最后介绍一个跨节点使用案例&#xff1b; 首先是一个简单的例子&a…

基于springboot实现的仿天猫商城项目

一、系统架构 前端&#xff1a;jsp | js | css | jquery 后端&#xff1a;springboot | mybatis-plus 环境&#xff1a;jdk1.7 | mysql | maven 二、代码及数据库 三、功能介绍 01. web端-首页 02. web端-商品查询 03. web端-商品详情 04. web端-购物车 05. web端-订单…

【网络安全】-《网络安全法》制定背景和核心内容

文章目录 1. 背景介绍1.1 数字时代的崛起1.2 中国网络安全形势 2. 《网络安全法》核心内容2.1 法律适用范围2.2 个人信息保护2.3 关键信息基础设施保护2.4 网络安全监管和应急响应2.5 网络产品和服务安全管理2.6 法律责任和处罚 3. 法律的意义和影响3.1 维护国家安全3.2 保护个…

《使用ThinkPHP6开发项目》 - 设置项目环境变量

《使用ThinkPHP6开发项目》 - 安装ThinkPHP框架-CSDN博客 在上一编我们讲了ThinkPHP6框架的创建&#xff0c;创建完成ThinkPHP6框架后&#xff0c;我们这里就可以开始设置我们的环境变量了。 安装完成ThinkPHP6框架生成的项目文件 修改项目配置我们修改项目config文件夹里的对…

<JavaEE> 多线程编程中的“等待和通知机制”:wait 和 notify 方法

目录 一、等待和通知机制的概念 二、wait() 方法 2.1 wait() 方法的使用 2.2 超时等待 2.3 异常唤醒 2.4 唤醒等待的方法 三、notify() 方法 四、notifyAll() 方法 五、wait 和 sleep 的对比 一、等待和通知机制的概念 1&#xff09;什么是等待和通知机制&#xff1f…

2023年4K投影仪怎么选?极米H6 4K高亮版怎么样?

随着人们生活水平的不断提升&#xff0c;投影仪也逐渐成为了家家户户的必备家居好物。近十年来&#xff0c;中国投影仪市场规模增长数倍&#xff0c;年均增长率大幅提高。从近10年的发展趋势来看&#xff0c;投影仪行业处于高速发展期。 此前&#xff0c;极米科技推出的极米H6…

crmeb本地开发配置代理

crmeb 是一个开源的商城系统&#xff0c; v5 版本是一个前后端分离的项目&#xff0c; 我们从git仓库中下载下来的是一个文件夹&#xff0c;其结构是这样的 我的系统没有使用docker &#xff0c;使用的是 laragon 的系统 所以首先我们要在 nginx 中配置 之后&#xff0c; 我们…

IDEA使用git从远程仓库获取项目

将地址填入url中 然后直接clone就行

Ant Design Vue 年选择器

文章目录 参考文档效果展示实现过程 参考文档 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; DatePicker 日期选择框 大佬&#xff1a;搬砖小匠&#xff08;Ant Design vue 只选择年&#xff09; 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案…

C语言——指针(五)

&#x1f4dd;前言&#xff1a; 上篇文章C语言——指针&#xff08;四&#xff09;更加深入的介绍了不同类型指针的特点&#xff0c;这篇文章主要想记录一下函数与指针的结合运用以及const和assert关于指针的用法&#xff1a; 1&#xff0c;函数与指针 2&#xff0c;const 3&am…

十五届蓝桥杯分享会(一)

注&#xff1a;省赛4月&#xff0c;决赛6月 一、蓝桥杯整体介绍 1.十四届蓝桥杯软件电子赛参赛人数&#xff1a;C 8w&#xff0c;java/python 2w&#xff0c;web 4k&#xff0c;单片机 1.8w&#xff0c;嵌入式/EDA5k&#xff0c;物联网 300 1.1设计类参赛人数&#xff1a;平…

STL(一)(pair篇)

1.pair的定义和结构 在c中,pair是一个模板类,用于表示一对值的组合它位于<utility>头文件中 pair的定义如下: template<class T1, class T2> struct pair{T1 first; //第一个值T2 second; //第二个值//构造函数pair();pair(const T1&x,const T2&y);//比较…