Не работают встроенные фильтры связанных таблиц

Всё что касается построения API
Ответить
Аватара пользователя
maksimepikhin
Сообщения: 3
Зарегистрирован: 2023.01.20, 11:45
Откуда: Москва

Не работают встроенные фильтры связанных таблиц

Сообщение maksimepikhin »

Имеется запрос: /api/table1?expand=table2&filter[table2Name][like]=a.
ActiveController настроен следующим образом:

Код: Выделить всё

/** @var string Модель поиска */
protected $modelSearchClass = '';

public function actions() {
    $actions = parent::actions();
    $actions['index']['dataFilter'] = [
        'class' => ActiveDataFilter::class,
        'searchModel' => $this->modelSearchClass,
        'attributeMap' => [
            'table2Name' => '{{%schema.table2}}.[[name]]',
        ]
    ];

    return $actions;
}
Модель поиска Table1Search имеет правила + добавлено свойство класса public $table2Name (в rules прописано оно). В самой модели Table1 есть отношение к Table2. Когда я делаю запрос, то получаю вот такой ответ: SQLSTATE[42P01]: Undefined table: 7 ERROR: missing FROM-clause entry for table "table2". Действительно, в запросе нет JOIN для table2.

Посмотрел исходит для IndexAction и там:

Код: Выделить всё

$modelClass = $this->modelClass;

$query = $modelClass::find();
if (!empty($filter)) {
    $query->andWhere($filter);
}
if (is_callable($this->prepareSearchQuery)) {
    $query = call_user_func($this->prepareSearchQuery, $query, $requestParams);
}
Никакого намека на JOIN.

Хотя в документации четко написано:

Код: Выделить всё

[
    'carPart' => 'car_part', // carPart will be used to filter car_part property
    'authorName' => '{{author}}.[[name]]', // authorName will be used to filter name property of joined author table
]
Что не так?
Ответить