Как отфильтровать коллекцию в laravel? - PullRequest
0 голосов
/ 02 марта 2020

Я возвращаю ExportTemplate модель:

$exportTemplates = ExportTemplate::where('user_id', Auth::id())->get();

результат примерно такой:

[
  {
    "id": 45,
    "name": "hallo",
    "user_id": 1,
    "deleted_at": null,
    "created_at": "2020-02-27 14:12:50",
    "updated_at": "2020-02-27 14:12:50",
    "ExportTemplateColumns": [
      {
        "id": 398,
        "export_template_id": 45,
        "searchable_column_id": 7,
        "created_at": "2020-02-27 14:12:50",
        "updated_at": "2020-02-27 14:12:50",
        "SearchableColumn": {
          "id": 7,
          "name": "bic",
          "type": "string",

          "searchable_table_id": 1,*** I need only results with searchable_table_id ==1

          "created_at": "2020-02-06 09:11:24",
          "updated_at": "2020-02-06 09:11:30",
          "label": "BIC"
        }
      }
    ]
  },
  {
    "id": 46,
    "name": "fol",
(...)

Я хочу отфильтровать этот результат через Фильтр коллекции, чтобы получить только:

ExportTemplateColumns->SearchableColumn->searchable_table_id == 1

Модели:

class ExportTemplate extends Model
{


    protected $appends = ["ExportTemplateColumns"];


    public function getExportTemplateColumnsAttribute()
    {
        return ExportTemplatesColumns::where('export_template_id',$this->id)->get();
    }

    public function user()
    {
        return $this->belongsTo(User::class,'id');
    }

    public function exportTemplatesColumns()
    {
        return $this->hasMany(ExportTemplatesColumns::class,'export_template_id');
    }

}

class ExportTemplatesColumns extends Model
{

    protected $appends = ["SearchableColumn"];


    public function getSearchableColumnAttribute()
    {
        return SearchableColumn::find($this->searchable_column_id);
    }

    public function exportTemplate()
    {
        return $this->belongsTo(ExportTemplate::class,'id');
    }

    public function searchableColumn()
    {
        return $this->belongsTo(SearchableColumn::class,'id');
    }



}

1 Ответ

0 голосов
/ 02 марта 2020

попробуйте это.

$exportTemplates = ExportTemplate::where('user_id', Auth::id())->get();


    $filtered = $exportTemplates->filter(function($d){
        return collect($d->ExportTemplateColumns)->filter(function($columns){
            return $columns->SearchableColumn->searchable_table_id === 1;
        })->count();
    });

$filtered->all();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...