只加载关系的 id(采摘)
Load just ids of relation (pluck)
我有一个简单的应用程序,使用 Laravel 5.5.13。
public function index()
{
return Pet::all();
}
这列出了所有宠物。我有很多用户可以拥有同一个宠物(宠物的人类家庭)的多对多关系。
我想加载那些用户。
做 return Pet::with('users')->get();
就可以了,但是它会加载各种过多的信息,比如用户 api_token 等,我只想选择一些字段,比如 id 和 name:
对于上面屏幕截图中的示例,我希望只得到 users: [1, 12]
。
我试过这样 pluck return Pet::with('users')->get()->pluck('id')
但这只给了我 ID。
如果您只想获取所有匹配用户至少拥有一只宠物的用户 ID,您可以尝试:
// 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();
- Querying Relations,查询关系是否存在
- Eager Loading,预先加载特定列
您可以 select 像这样的特定字段:
Pet::with(['users' => function($query) { $query->select('id', 'name'); }])->get()
我有一个简单的应用程序,使用 Laravel 5.5.13。
public function index()
{
return Pet::all();
}
这列出了所有宠物。我有很多用户可以拥有同一个宠物(宠物的人类家庭)的多对多关系。
我想加载那些用户。
做 return Pet::with('users')->get();
就可以了,但是它会加载各种过多的信息,比如用户 api_token 等,我只想选择一些字段,比如 id 和 name:
对于上面屏幕截图中的示例,我希望只得到 users: [1, 12]
。
我试过这样 pluck return Pet::with('users')->get()->pluck('id')
但这只给了我 ID。
如果您只想获取所有匹配用户至少拥有一只宠物的用户 ID,您可以尝试:
// 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();
- Querying Relations,查询关系是否存在
- Eager Loading,预先加载特定列
您可以 select 像这样的特定字段:
Pet::with(['users' => function($query) { $query->select('id', 'name'); }])->get()