Загрузить только идентификаторы отношения (выщипывать)

У меня есть простое приложение, использующее Laravel 5.5.13.

public function index()
{
    return Pet::all();
}

Здесь перечислены все домашние животные. У меня есть отношения «многие ко многим», когда многие пользователи могут владеть одним и тем же домашним животным (человеческая семья домашних животных).

Я хочу загрузить этих пользователей.

Выполнение return Pet::with('users')->get(); делает свое дело, однако оно загружает всю чрезмерную информацию, такую ​​​​как пользователи api_token и т. Д., Я просто хочу выбрать некоторые поля, такие как id и имя:

Я надеялся просто получить users: [1, 12] для примера на скриншоте выше.

Я пробовал выщипывать вот так return Pet::with('users')->get()->pluck('id'), но это дает мне только идентификаторы.


person Blagoh    schedule 03.10.2017    source источник


Ответы (2)


Если вы хотите получить только идентификаторы пользователей, у которых у всех соответствующих пользователей есть хотя бы одно домашнее животное, вы можете попробовать:

// Retrieve all users that have at least one pet
return User::has('pets')->get(['id']);

Если я вас неправильно понимаю, и вам все еще нужна вся информация о питомцах, вы можете использовать двоеточие для получения определенных столбцов в отношении:

// Returns all Pets, along with their users' IDs
return Pet::with('users:id')->get();
person Chris Forrence    schedule 03.10.2017
comment
Спасибо, сэр, это очень круто! Это намного ближе к тому, что мне нужно, но не совсем так, пожалуйста, посоветуйте: мне нужно перечислить информацию обо всех домашних животных, а не о пользователях, у которых есть хотя бы одно домашнее животное. С Pet::with('users:id')->get() теперь он дает мне: массив объектов, но он включает в себя опорную точку - screenshots.firefoxusercontent.com/images/ - - person Blagoh; 03.10.2017

Вы можете выбрать определенные поля, например:

Pet::with(['users' => function($query) { $query->select('id', 'name'); }])->get()
person Leonardo Barbosa    schedule 03.10.2017
comment
Спасибо это очень круто! Однако мне нужен был только массив идентификаторов в записи пользователей. Он предоставляет массив объектов, включая pivot - screenshots.firefoxusercontent. ком/изображения/ - person Blagoh; 03.10.2017
comment
может быть, это сработает для вас Pet::with(['users' => function($query) { $query->select('id', 'name')->without('pivot'); }])->get() - person Leonardo Barbosa; 03.10.2017
comment
Спасибо @Leonardo, но он не удаляет сводную точку :(, это также все еще массив объектов с { id:12 }, а не массив целых чисел id :( - person Blagoh; 04.10.2017