Как создать связь из данных столбца JSON в той же таблице? - PullRequest
0 голосов
/ 02 мая 2018

У меня есть что-то вроде следующей таблицы (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, я просто использую Eloquent (версия 5.5) в Slim.

1 Ответ

0 голосов
/ 03 мая 2018

Попробуйте это:

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