eloquent - 如何从同一张表上的 json 列数据创建关系?
问题描述
我有类似下表(tablename = applications
)的内容:
| id | applicants |
| ------------- | ------------- |
| uuid-123-abc | [{'first_name':'Dave'},{'first_name':'Steve'}] |
我需要能够为它创建一个关系,所以我可以去:
$application->applicants
并且(在这个例子中)得到一个包含两个Applicant
模型的集合。
我假设我在某处需要一个申请人模型类。但我什至不确定这是否可以完成,因为没有applicant
桌子。
我只是在尝试:
public function applicants()
{
return Collection::make([$this->applicants]);
但这不是关系,我正试图让它与Neromerx JsonApi一起工作。
事实上,如果有一种方法可以为 JsonApi 模仿这种行为,我会很乐意使用该解决方案。
到目前为止,我的关系都非常简单。我希望能够以同样的方式获得申请人:
use Neomerx\JsonApi\Schema\SchemaProvider;
class ApplicationSchema extends SchemaProvider
{
protected $resourceType = 'applications';
public function getId($application) {
return $application->id;
}
public function getAttributes($application) {
return [
.....
];
}
public function getRelationships($application, $isPrimary, array $includeRelationships) {
return [
'applicants' => [self::DATA => $application->applicants];
];
}
}
可以使用其中一种方法来完成吗?
我没有使用 Laravel,我只是在 Slim 中使用 Eloquent(5.5 版)。
解决方案
尝试这个:
public function getApplicantsAttribute()
{
$items = json_decode($this->attributes['applicants']);
$instance = new Applicant();
return $instance->newCollection(array_map(function($item) use($instance) {
return $instance->newFromBuilder($item);
}, $items));
}
推荐阅读
- python - tkinter:调用消息框后无法输入
- python - 我的数独求解程序进入无限循环,我不明白为什么 [python]
- swift - 在将值分配给 Swift 语言的属性之前,我们如何验证和调整值?
- javascript - ERROR TypeError: undefined is not an object (evalating 'this.props.navigation.navigate') when import my component in child
- flutter - m1 Mac 上的颤振插件显示错误“未找到模块 'foo'”
- swift - 在奇怪的行为中比较角度和向上
- python - 是否可以将 POST 请求中的视频读入 python-ffmpeg 或 OpenCV?
- python - Python pydantic 范围验证
- node.js - Dockerfile 应该执行“npm install”和“npm run build”还是应该只复制这些文件?
- r - 如何标记给定 ggplot 对象中数据点的 y 值?