Как вернуть другое отношение как одно и то же имя в Api Resource - PullRequest
0 голосов
/ 03 мая 2018

В моем проекте я установил несколько отношений, таких как:

Модель

public function foo() 
{ 
  return $this->hasMany(Bar::class);
}

public function fooSold() 
{ 
  return $this->hasMany(Bar::class)->where('sold', 1);
}

Контроллер

public function show()
{
  $bar = Bar::with('foo')->first();
  return new BarResource($bar);
}

public function showSold()
{
  $bar = Bar::with('fooSold')->first();
  return new BarResource($bar);
}

Ресурс

public function toArray($request)
return [
...
'foo' => Foo::collection($this->whenLoaded('foo')),
]

Возврат первой функции в моем контроллере не проблема. Но как мне вернуть второй файл с тем же именем, что и 'foo' в моем ресурсе?

'foo' => Foo::collection($this->whenLoaded'fooSold')),
'foo' => Foo::collection($this->whenLoaded'foo')),

Это работает, но не похоже на правильный способ сделать это, так как у вас два одинаковых ключа массива.

Какой лучший способ сделать это?

Ответы [ 3 ]

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

Используйте локальную область запроса для второго случая:

public function scopeSold($query) 
{ 
    return $query->whereHas('foo', function ($q) { 
        $q->where('sold', 1);
    });
}

// call the scope
$sold = Foo::sold();
0 голосов
/ 13 декабря 2018

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

'foo' => Foo::collection($this->whenLoaded('foo') instanceof MissingValue ? $this->whenLoaded('fooSold') : $this->whenLoaded('foo')),
0 голосов
/ 03 мая 2018

Весь смысл массивов в том, чтобы иметь уникальные ключи. Если вы хотите сохранить пары значений, создайте массив массивов, например:

$array[] = [$value1, $value2];

В вашем случае что-то вроде:

'foo' => [Foo::collection($this->whenLoaded'fooSold')), Foo::collection($this->whenLoaded'foo'))]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...