想要用json字段内的键来作为关联的外键,有可行办法么?

起因是 Category 的字段已经设计好,只预留了一个 json 类型的 ext 字段,Category 模型属于另一个模块,不便修改和增加数据库中的字段。
所以我想要用 json 内的字段来做关联,尝试了下面的写法,不能实现,把 . 换成 -> 也是不可以的。

class Category extends Model
{
    protected $casts = [
        'ext'    => 'json',
    ];
}
# 不可用
Category::resolveRelationUsing('supplier', function (Category $category) {
    return $category->belongsTo(Supplier::class, 'ext.supplier_id');
});

# 不可用
Category::resolveRelationUsing('supplier', function (Category $category) {
    return $category->belongsTo(Supplier::class,  'ext->supplier_id');
});
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
最佳答案

我们都是用这个包,建议你可以试一下 github.com/staudenmeir/eloquent-js...

1年前 评论
讨论数量: 5

不建议这样做。 json 内容不可控,这样做的话相当于强制进行关联,一旦 json 内容发生变化的话,造成的影响是不可控制的。话说回来,如果有关联的需要的话,是否可以考虑把 json 里的内容拆出来作为单独的字段呢?个人建议,仅供参考。

2年前 评论

找到了一个扩展包

github.com/staudenmeir/eloquent-js...

laravel 官方不推荐使用 json 的字段作为关联模型的外键,因为 json 的字段是不可控的。

2年前 评论

不建议这样做。 json 内容不可控,这样做的话相当于强制进行关联,一旦 json 内容发生变化的话,造成的影响是不可控制的。话说回来,如果有关联的需要的话,是否可以考虑把 json 里的内容拆出来作为单独的字段呢?个人建议,仅供参考。

2年前 评论
yangweijie

json 字段可以提取内部键做为一个虚拟字段,然后只要每次分类存入 json 里虚拟字段就会更新,这样应该可以作为关联字段使用取名 category_alia 之类的。

1年前 评论

我们都是用这个包,建议你可以试一下 github.com/staudenmeir/eloquent-js...

1年前 评论

我劝你别省事,省事的结果就是花更多时间去维护。

1年前 评论