Laravel 4 - Get Array of Attributes from Collection

后端 未结 4 1871
长发绾君心
长发绾君心 2021-02-01 14:35

I have a collection of objects. Let\'s say the objects are tags:

$tags = Tag::all();

I want to retrieve a certain attribute for each tag, say i

4条回答
  •  遥遥无期
    2021-02-01 14:51

    Here are a few snippets from my own experimentation on the matter this morning. I only wish (and maybe someone else knows the solution) that the Collection had a $collection->distinct() method, so I could easily generate a list of column values based on an already filtered collection.

    Thoughts?

    I hope these snippets help clarify some alternative options for generating a list of unique values from a Table, Collection, and Eloquent Model.

    Using a Collection (Happy)

    /**
     * Method A
     *     Store Collection to reduce queries when building multiple lists
     */
    $people = Person::get();
    $cities = array_unique( $people->lists('city') );
    $states = array_unique( $people->lists('state') );
    // etc...
    

    Using an Eloquent Model (Happier)

    /**
     * Method B
     *     Utilize the Eloquent model's methods
     *     One query per list
     */
    // This will return an array of unique cities present in the list
    $cities = Person::distinct()->lists('city');
    $states = Person::distinct()->lists('state');
    

    Using an Eloquent Model PLUS Caching (Happiest)

    /**
     * Method C
     *     Utilize the Eloquent model's methods PLUS the built in Caching
     *     Queries only run once expiry is reached
     */
    $expiry = 60; // One Hour
    $cities = Person::remember($expiry)->distinct()->lists('city');
    $states = Person::remember($expiry)->distinct()->lists('state');
    

    I would love to hear some alternatives to this if you guys have one!

    @ErikOnTheWeb

提交回复
热议问题