americanknight
americanknight

Reputation: 759

Exclude all except specified attributes in query - Eloquent Laravel 4.2

In Laravel 4.2, the following Eloquent query will remove the attributes that are specified in the array. I want to do a similar operation in which I exclude all attributes by default and only include the ones that are in an array. How can I do this? I suspect that the answer may have something to do with defining a custom $appends array on the model before running the query, but I don't know how to do this.

return MyModel::all()->each(function($row) {
    $row->setHidden([
        'attribute_1',
        'attribute_2'
    ]);
});

Upvotes: 0

Views: 2927

Answers (1)

Janko
Janko

Reputation: 202

In your model

protected $excludedColumns = ['attr1', 'attr2'];

  public function scopeExcludeColumns($query) {
        return $query->select(array_diff(Schema::getColumnListing($this->table), $this->excludedColumns));
    }

Use:

$result = Model::excludedColumns()->all();

another option is to setup $hidden property on model by folowing

protected $hidden = array('attr1','attr2');

but it will exclude this fields from model only when call $result->toArray; or $result->toJson();

Upvotes: 1

Related Questions