首页 > 解决方案 > 如何从同一张表上的 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 版)。

标签: eloquentjson-api

解决方案


尝试这个:

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));
}

推荐阅读