最佳实践:一对一数据关联

在开发过程中,通常会遇到很多 一对一 数据的处理情况。
1、有的时候表格很大,只是需要按需取一部分的,连表可能造成锁表;
2、需要根据我后面的业务结果来决定是不是要加载一对一;
3、在后期分库分表,如果连表查询可能需要大量修改sql语句;
以上情况下 join 似乎就不太适合;也就衍生出了以下数据关联最佳实践。

比如下面得到的商品信息 和 商品详情 两个数组,这里为了演示只是使用了基础字段,实际开发中可能会复杂的多,下方只是演示代码。

/**
* 最佳实践:一对一数据关联
*/
public function get_goods_detail_list()
{
        // 商品信息
        $goods = [
            ['id' => 2135, 'price' => 1212],
            ['id' => 3245, 'price' => 1212],
            ['id' => 5342, 'price' => 1212],
            ['id' => 5341, 'price' => 1212],
            ['id' => 5623, 'price' => 1212]
        ];
        // 商品详情
        $goods_detail_list = [
            ['id' => 1, 'goods_id' => 2135, 'content' => 'Doe'],
            ['id' => 2, 'goods_id' => 3245, 'content' => 'Smith'],
            ['id' => 3, 'goods_id' => 5342, 'content' => 'Jones'],
            ['id' => 4, 'goods_id' => 5341, 'content' => 'Doe']
        ];
        $goods_detail_list_by_keys = array_column($goods_detail_list, null, 'goods_id');

        // 有时候数据有可能会因对不上,直接返回给前端,前端没有做容错处理就会导致前端页面崩溃
        $goods_detail_default = ['id' => null, 'goods_id' => null, 'content' => null];
        foreach ($goods as &$item) {
            $tmp = array_key_exists($item['id'], $goods_detail_list_by_keys) ? $goods_detail_list_by_keys[$item['id']] : [];
            $item['goods_detail'] = array_merge($goods_detail_default, $tmp);
        }
        // 直接用引用去操作源数据,最后别忘了 unset 掉最后的 $item
        unset($item);
        var_dump($goods);
    }

你可能感兴趣的:(最佳实践:一对一数据关联)