Получение дополнительных полей из laravel api, имеющих отношения отношения - PullRequest
1 голос
/ 19 октября 2019

У меня есть две таблицы данных, связанные друг с другом отношением принадлежащего человеку. И когда я выбираю данные из его контроллеров API с помощью выбора только двух ключей столбца ['id','title'], все же он возвращает некоторые дополнительные данные в объекте ответа.

model код:

public function place(){

    return $this->belongsToMany(Place::class,'city_place')->select(array('id', 'title'));

}

controller код:

public function ofcity($id)
{
    $city=City::findOrFail($id);
    return new CityResource(  $city->place()->get());

}

введите описание изображения здесь

Ответы [ 2 ]

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

Спасибо всем, кто помог мне, но ни одно из вышеприведенных решений не сработало ... Я понял это, попробовав разные функции и потратив на это часы.

модель Код места:

открытая функцияplace () {

    return $this->belongsToMany(Place::class,'city_place','city_id','place_id')->select(array('places.id', 'places.title'));

}

код контроллера:

публичная функция города ($ id) {$ city = City :: findOrFail ($ id);

вернуть новыйCityResource ($ city-> place () -> get () -> map (функция ($ item, $ key) {

 return ['id' => $item['id'],'title'=>$item['title']];
    })

    );
1 голос
/ 19 октября 2019

Вы должны указать название таблицы перед полями.

модель Код места:

protected $columns = ['places.id', 'places.title']; //all column for select

public function scopeExclude($query, $value = [])
{
    return $query->select(\array_diff($this->columns, (array) $value));
}

модель Код города:

public function place()
{        
     return $this->belongsToMany(Place::class,'city_place', 'city_id', 'place_id');        
}

контроллеркод:

public function ofcity($id)
{
    $cities = City::findOrFail($id)->place()->exclude(['featured_image'])->get()->toArray();
    return response()->json(['cities' => $cities], 200);    
}

В исключении пропустите все поля, которые не нужно показывать.

...