想要用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');
});
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
最佳答案

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

1年前 评论
讨论数量: 5

找到了一个扩展包

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年前 评论

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