【问题标题】:Codeigniter convert data before the viewCodeigniter 在视图之前转换数据
【发布时间】:2017-05-16 08:10:21
【问题描述】:

我有一个表格用户,其中保存了性别、结婚状态等数据。我使用 char(1) 将值存储到数据库。示例 m 为 man。 现在我想在打印到视图之前将 m 转换为 Man。

  <?php
            //Gender

            if($query->gender=='m')
            {
                $gender='Man';

            }else if($query->gender=='g')
            {
                 $gender='Gay';
            }else if($query->gender=='l')
            {
                 $gender='Less';
            }else if($query->gender=='w')
            {
                 $gender='Woman';
            }else
            {
                 $gender='No data';
            }
            // End gender
              //Status

            if($query->status=='s')
            {
                $status='Singel';

            }else if($query->status=='m')
            {
                 $status='Married';
            }else if($query->status=='d')
            {
                 $status='Divorced';
            }else
            {
                 $status='No data';
            }
            // End gender


            ?>

我的问题是有没有办法做这种事情。

【问题讨论】:

  • 你的代码有什么问题?您已经在进行转换。您需要什么帮助?
  • 你已经做对了,但是你有这么多if,你可以把它转换成switch case。但是您要求另一件事,即如何避免此代码。并直接从数据库中获取数据。
  • 我的转换代码很长。所以视图看起来一团糟。我正在寻找制作干净代码的解决方案。
  • @VuongTran 请在你的代码中使用 switch case,这样你的代码就会干净

标签: mysql database codeigniter


【解决方案1】:

您可以使用 MySQL 查询将单个字符替换为全文。我提供了一个示例代码,替换为您的实际代码。我的代码不是一个精确的解决方案,但可以让您了解如何解决您的问题。

$sql = "SELECT id,name,
              case gender
                 when 'm' then 'Male'
                 when 'f' then 'Female'
              end as gender,
              case gender
                 when 'S' then 'Singel'
                 when 'M' then 'Married'
              end as status 
       FROM user";
$qry = $this->db->query($sql);

then your code....

【讨论】:

    【解决方案2】:
       <?php
                    //Gender
                    switch ($query->gender) {
                        case 'm':
                            $gender='Man';
                            break;
                        case 'g':
                            $gender='Gay';
                            break;
                        case 'l':
                            $gender='Less';
                            break;
                        case 'w':
                            $gender='Woman';
                            break;
                        default:
                            $gender='No data';
                            break;
    
                    }
    
                    //Status
                    switch ($query->status) {
                       case 'S':
                            $status='Singel';
                            break;
                        case 'm':
                            $status='Married';
                            break;
                        case 'd':
                            $status='Divorced';
                            break;
                        default:
                            $gender='No data';
                            break;
                    }
    ?>
    

    【讨论】:

      【解决方案3】:

      您可以创建三个不同的表:

      1) Customers (custId, name, age, mobile, genderId[FK], statusId[FK]) 2) Gender (genderId, genderText) 3) MaritalStatus (statusId, statusText)

      您可以将statusIdgenderId 存储到customers 表中。

      查询:

      $this->db->select("C.custId, C.name, C.age, C.mobile, C.genderId, G.genderText, C.statusId, S.statusText");
      $this->db->from("Customers as C");
      $this->db->join("Gender as G", "C.genderId = G.genderId");
      $this->db->join("MaritalStatus as S", "C.statusId = S.statusId");
      $query = $this->db->get();
      
      return $query->result();
      

      你有这样的记录:

      ["1", "John Doe", "65", "1234567890", "1", "Male", "2", "Married"]

      【讨论】:

      • 是的,代码看起来更干净。但是创建一个只有 2 行的表是否可以。 1=男性,2=女性。在我看来很有趣。
      • 是的,它看起来很有趣,但最好提供最大的可配置性。此外,当涉及多语言时,您可以通过提供语言键来管理数据库中的翻译。
      【解决方案4】:

      这是我找到的最好的。

       $array_gender=array("m"=>"Man","g"=>"Gay","l"=>"Less","w"=>"Woman",""=>"No data");
          echo $array_gender[$query->gender];
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-02
        • 1970-01-01
        相关资源
        最近更新 更多