想要用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 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
最佳答案

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

1年前 评论
讨论数量: 5

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

1年前 评论

找到了一个扩展包

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

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

1年前 评论

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

1年前 评论
yangweijie

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

1年前 评论

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

1年前 评论

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

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!