Не работают встроенные фильтры связанных таблиц
Добавлено: 2023.02.07, 14:47
Имеется запрос: /api/table1?expand=table2&filter[table2Name][like]=a.
ActiveController настроен следующим образом:
Модель поиска Table1Search имеет правила + добавлено свойство класса public $table2Name (в rules прописано оно). В самой модели Table1 есть отношение к Table2. Когда я делаю запрос, то получаю вот такой ответ: SQLSTATE[42P01]: Undefined table: 7 ERROR: missing FROM-clause entry for table "table2". Действительно, в запросе нет JOIN для table2.
Посмотрел исходит для IndexAction и там:
Никакого намека на JOIN.
Хотя в документации четко написано:
Что не так?
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;
}
Посмотрел исходит для 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);
}
Хотя в документации четко написано:
Код: Выделить всё
[
'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
]