phpno1/dictionary

laravel data dictionary mapping

1.0.2 2018-05-11 18:03 UTC

This package is auto-updated.

Last update: 2024-11-20 21:43:11 UTC


README

功能

数据映射字典转化。

官方扩展qq群

qq:680531281

使用要求

  • laravel >= 5.*
  • php >= 7

composer

执行以下命令获取包的最新版本:

    composer require phpno1/dictionary

laravel

生成配置文件

    php artisan vendor:publish --provider "Phpno1\Dictionaries\Providers\DictionaryProvider"

> = laravel5.5

ServiceProvider将自动附加

其他版本

'providers' => [
    Phpno1\Dictionaries\Providers\DictionaryProvider::class,
]

配置

模型定义

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Phpno1\Dictionaries\Supports\Mapping;

class Goods extends Model
{
    use Mapping;//引入trait
}

设置字典

//config/dictionaries.php

return [

    'label'=>'label'//这里是多字段映射用到的
    
    'tags'=>[
        '1'=>'进口食品',
        '2'=>'奶制品',
    ],
    'recommend'=>[
        '1'=>'',
        '2'=>'',
    ]
];
    

方法

mapping

    /**
     * @param string $fields
     * @param string $separator 默认值 ,分割方式
     * @return string
     */
    mapping('字段',"分割方式='默认是 , '");

mappingArray

    /**
     * @param string $fields
     * @param string $separator 默认值 ,分割方式
     * @return array
     */
    mappings('字段',"分割方式='默认是 , '");

mappings

    /**
     * @param array $fields
     * @param string $separator 默认值 ,分割方式
     * @return $this
     */
    mappings('字段',"分割方式='默认是 , '");

mappingsArray

    /**
     * @param array $fields
     * @param string $separator 默认值 ,分割方式
     * @return $this
     */
    mappingsArray('字段',"分割方式='默认是 , '");

数据转化

单个字段字典映射

    //单条数据转化 
    Route::get('/', function () {
        $result=(new \App\Goods)->first();
        //原始数据
        array:4 [▼
          "id" => 1
          "name" => "测试商品"
          "tags" => "1,2,3" //或者 ['1',2','3']
          "recommend" => "1"
        ]
        
        //转化  返回字符串
        $result->tags_title=$result->mapping('tags');
        $result->recommend_title=$result->mapping('recommend');       
        //转化后数据  
        array:6 [▼
          "id" => 1
          "name" => "测试商品"
          "tags" => "1,2,3"
          "recommend" => "1"
          "tags_title" => "进口食品,奶制品"
          "recommend_title" => ""
        ]  
        
        //转化  返回数组
        $result->tags_title=$result->mappingArray('tags');
        $result->recommend_title=$result->mappingArray('recommend');
        //转化后数据  
        array:6 [▼
          "id" => 1
          "name" => "测试商品"
          "tags" => "1,2,3"
          "recommend" => "1"
          "tags_title" => array:2 [▼
            1 => "进口食品"
            2 => "奶制品"
          ]
          "recommend_title" => array:1 [▼
            1 => ""
          ]
        ]
    });
    
   

集合数据转化

    Route::get('/', function () {
        $result=(new \App\Goods)->all();
        $result->transform(function($goods){
            $goods->tags_title=$goods->mapping('tags');
            $goods->recommend_title=$goods->mapping('recommend');
            return $goods;
        });
        dd($result->toArray());
    });

分页数据转化

    $result=(new \App\Goods)->paginate();
        $result->getCollection()->transform(function($goods){
        $goods->tags_title=$goods->mapping('tags');
        $goods->recommend_title=$goods->mapping('recommend');
        return $goods;
    });
    dd($result->toArray());

多个字段字典映射

    Route::get('/', function () {
        $result=(new \App\Goods)->first();
        
        //转化  返回字符串
        $result=$result->mappings(['tags','recommend']);
        dd($result->toArray());
        
        //转化  返回数组
        $result=$result->mappingsArray(['tags','recommend']);
        dd($result->toArray());
    });

注意事项

  • 复杂数据映射请用单子段转化。
  • 数据映射字段和字典key要一致否则无法转化。
  • 字典配置文件label如果是空,转化原始字段则数据被覆盖。