【问题标题】:Load just ids of relation (pluck)仅加载关系的 id (pluck)
【发布时间】:2017-10-04 05:53:40
【问题描述】:

我有一个简单的应用程序,使用 Laravel 5.5.13。

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

这列出了所有宠物。我有许多用户可以拥有同一只宠物(宠物的人类家庭)的多对多关系。

我想加载这些用户。

return Pet::with('users')->get(); 可以解决问题,但是它会加载各种过多的信息,例如用户 api_token 等,我只想选择一些字段,例如 id 和 name:

我希望得到users: [1, 12] 上面截图中的例子。

我试过像这样return Pet::with('users')->get()->pluck('id') 采摘,但这只会给我 id。

【问题讨论】:

    标签: laravel laravel-5.5


    【解决方案1】:

    您可以像这样选择特定字段:

    Pet::with(['users' => function($query) { $query->select('id', 'name'); }])->get()
    

    【讨论】:

    • 谢谢,这很酷!但是,我只需要用户条目中的一组 id。它给出了一个对象数组,包括pivot - screenshots.firefoxusercontent.com/images/…
    • 也许这对你有用Pet::with(['users' => function($query) { $query->select('id', 'name')->without('pivot'); }])->get()
    • 感谢@Leonardo,但它没有删除pivot :(,它仍然是带有{ id:12 } 的对象数组,而不是id 整数数组:(
    【解决方案2】:

    如果您只想获取所有匹配用户至少拥有一只宠物的用户 ID,您可以尝试:

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

    如果我误解了你,而你仍然想要所有 Pet 信息,你可以使用冒号来获取关系中的特定列:

    // Returns all Pets, along with their users' IDs
    return Pet::with('users:id')->get();
    

    【讨论】:

    • 谢谢先生,这很酷!它更接近我的需要,但不完全是,请您说:我确实需要列出所有宠物信息,而不是至少拥有一只宠物的用户。有了Pet::with('users:id')->get(),它现在给了我:一个对象数组,但它包括枢轴 - screenshots.firefoxusercontent.com/images/… -
    猜你喜欢
    • 1970-01-01
    • 2021-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多