mertindervish
mertindervish

Reputation: 301

Laravel Eloquent Get Append Attributes With Find

I created a model with 10 append attributes and I can't get them with find() method. But when I convert returned object from find() to an array with method toArray() I can see them but I need them like an object. This object was printed when I use find():

School Object
(
    [table:protected] => schools
    [fillable:protected] => Array
        (
            [0] => name
            [1] => type_id
            [2] => description
            [3] => info_specialties
            [4] => contacts
            [5] => cover_name
            [6] => financing_id
            [7] => city
        )

    [guarded:protected] => Array
        (
            [0] => id
        )

    [appends:protected] => Array
        (
            [0] => type
            [1] => short_type
            [2] => school_url
            [3] => cover_photo_url
            [4] => cover_photo_thumbnail_url
            [5] => city
            [6] => municipality
            [7] => appended_district_id
            [8] => district
            [9] => description_without_tags
        )

    [district_id] => 
    [cover_photo] => 
    [connection:protected] => 
    [primaryKey:protected] => id
    [perPage:protected] => 15
    [incrementing] => 1
    [timestamps] => 1
    [attributes:protected] => Array
        (
            [id] => 24
            [type_id] => 3
            [name] => adasdasd
            [description] => 
asdadasdasdasdqwdqd\qw\[dqw\d



            [info_specialties] => 
qwqwdqwdqwdqwdqwd



            [contacts] => 
qwdqwdqwdqwd



            [cover_name] => SAbjfpe4m7.jpg
            [financing_id] => 1
            [city_id] => 18
            [created_at] => 2015-01-31 20:56:06
            [updated_at] => 2015-02-04 18:50:13
        )

    [original:protected] => Array
        (
            [id] => 24
            [type_id] => 3
            [name] => adasdasd
            [description] => 
asdadasdasdasdqwdqd\qw\[dqw\d



            [info_specialties] => 
qwqwdqwdqwdqwdqwd



            [contacts] => 
qwdqwdqwdqwd



            [cover_name] => SAbjfpe4m7.jpg
            [financing_id] => 1
            [city_id] => 18
            [created_at] => 2015-01-31 20:56:06
            [updated_at] => 2015-02-04 18:50:13
        )

    [relations:protected] => Array
        (
        )

    [hidden:protected] => Array
        (
        )

    [visible:protected] => Array
        (
        )

    [dates:protected] => Array
        (
        )

    [touches:protected] => Array
        (
        )

    [observables:protected] => Array
        (
        )

    [with:protected] => Array
        (
        )

    [morphClass:protected] => 
    [exists] => 1
)

And when I use toArray:

Array
(
    [id] => 24
    [type_id] => 3
    [name] => adasdasd
    [description] => 
asdadasdasdasdqwdqd\qw\[dqw\d



    [info_specialties] => 
qwqwdqwdqwdqwdqwd



    [contacts] => 
qwdqwdqwdqwd



    [cover_name] => SAbjfpe4m7.jpg
    [financing_id] => 1
    [city_id] => 18
    [created_at] => 2015-01-31 20:56:06
    [updated_at] => 2015-02-04 18:50:13
    [type] => qdasdasd
    [short_type] => asdasdasd
    [school_url] => http://localhost:8000/school/24
    [cover_photo_url] => http://localhost:8000/storage/cover_photos/SAbjfpe4m7.jpg
    [cover_photo_thumbnail_url] => http://localhost:8000/storage/cover_photos/thumbnails/SAbjfpe4m7.jpg
    [city] => sdasdasd
    [municipality] => ÐÑкаква община2 от нÑкакъв облаÑÑ‚2
    [appended_district_id] => 6
    [district] => ÐÑкакъв облаÑÑ‚2
    [description_without_tags] => asdadasdasdasdqwdqd\qw\[dqw\d

)

Here's an example of my class:

<?php

class School extends Eloquent {
    protected $appends = array('type');

    public function getTypeAttribute()
    {
        return Type::find($this->type_id)->name;
    }
}

Upvotes: 0

Views: 6865

Answers (1)

lukasgeiter
lukasgeiter

Reputation: 152860

That's the nature of custom attributes that you get with an attribute accessor. They will only be evaluated when used (and then cached for later use). When you convert it to and array, all $appends properties are loaded.

If you have your model object you can just access them like any other attribute:

$school->type;

Upvotes: 2

Related Questions