Laravel: ограничение столбцов извлекается в загруженных отношениях с ограничениями - PullRequest
0 голосов
/ 05 июля 2018

Когда я с нетерпением загружаю простые отношения Eloquent, я могу ограничить столбцы, полученные с использованием следующего синтаксиса:

MyModel::with(myRelation:id,col_2,col_3);

Когда я хочу ограничить членов отношений, я делаю это:

MyModel::with(['myRelation' => function ($query) {
    $query->where([
        ['field_1', 'a_value'],
        ['field_2', 'b_value']
    ]);
}]);

Но это загружает все столбцы связанных моделей. Я попытался заменить ключ myRelation на полный синтаксис myRelation:id,col_2,col_3, но он выдает ошибку, которая говорит, что имя отношения не найдено.

Я также попытался добавить следующие методы к $query:

->select('id', 'col_2', 'col_3')

или

->addSelect('id', 'col_2', 'col_3')

или

->get('id', 'col_2', 'col_3')

Ни один из них не был успешным.

Ответы [ 2 ]

0 голосов
/ 05 июля 2018

Хорошо, чтобы заставить это работать, я должен был:

  • включает иностранный ключ в список выбора (спасибо, @ankitPatel) и
  • передает параметры оператору select в виде массива следующим образом:

    -> выберите ([ 'идентификатор', 'foreign_key', 'col3', 'COL4'])

0 голосов
/ 05 июля 2018

Одним из вариантов может быть сохранение всех столбцов (кроме id, col_2, col_3) скрытыми в исходной модели MyRelation указывает на.

protected $hidden = ['col_4', 'col_5',...];

Вы также можете изменить определение отношения в вашей модели MyModel:

public function myRelation()
{
    return $this->belongsTo('MyRelation')->select(array('id', 'col_2', 'col_3'));
}

Но, в общем, это должно работать:

MyModel::with(array('myRelation'=>function($query){
        $query->select('id','col_2', 'col_3)
              ->where([
                       ['field_1', 'a_value'],
                       ['field_2', 'b_value']
                ]);
    }))->get();

Помните, вы должны включить присоединяющий ключ (скажем, id) в список выбора выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...