Управление отношениями в данных перед возвращенным ответом в Laravel 5.8 - PullRequest
0 голосов
/ 02 октября 2019

это текущий ответ:

"id": 3,
"name": "hello",
"photo": {
    "id": 62,
    "address": "uploads/DKDH32kdsl29382dHW92387130.jpeg",
}

я хочу вот что:

"id": 3,
"name": "hello",
"photo": {
    "id": 62,
    "address": "http://mysite.domain/uploads/DKDH32kdsl29382dHW92387130.jpeg",
}

Я имею в виду, что хочу объединить адрес своего сайта с адресом свойство фото объекта

и, наконец, это мой код:

return Model::select(
        'id',
        'name'
    )
    ->with('photo:id,address')
    ->get();

Ответы [ 2 ]

1 голос
/ 02 октября 2019

Лучший способ достичь своей цели - использовать аксессор . С помощью этой функции вы можете получить доступ к параметру address, но вместо получения URI по умолчанию вы можете указать Laravel вернуть полный URL-адрес.

/**
 * Get the adress as URL.
 *
 * @param  string  $value
 * @return string
 */
public function getAddressAttribute($value)
{
    return url($value);
}

В противном случае, если вы возвращаете JSON Response,вы можете сделать то же самое, используя API Resource , который является лучшим решением, поскольку вы не будете изменять это значение при каждом обращении к нему, а просто при необходимости.

class Model extends JsonResource
{
    /**
     * Transform the resource into an array.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return array
     */
    public function toArray($request)
    {
        return [
            // [...] other attributes
            'address' => url($this->address),
        ];
    }
}
0 голосов
/ 02 октября 2019

Итак, если у вас есть модель Photo.php, вы можете использовать Accessor для изменения address для включения вашего домена.

Photo.php:

class Photo extends Model {
  public function getFullAddressAttribute(){
    return "http://mysite.domain/".$this->address;
  }
}

Затем в вашем контроллере:

return Model::select('id', 'name')
->with('photo:id,address,full_address')
->get();

Примечание. Если full_address в with() вызывает ошибку, вы можете использовать visible() в сочетании с appends(), чтобы включить ее:

class Photo extends Model {
  protected $visible = ["id", "address", "full_address"]
  protected $appends = ["full_address"];

  public function getFullAddressAttribute(){ ... }

Тогда в вашем контроллере:

return Model::select('id', 'name')
->with('photo')
->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...