Как фильтровать связанные данные с помощью модуля FriendsOfCake Search для CakePHP 3.1.0

Плагин: FriendsOfCake\Search

 CakePHP: 3.1.0 

В настоящее время я добавляю возможность фильтровать мой контроллер Orders по методу index() . Мне нужно иметь возможность искать Заказы на мое имя Пользователя, разместившего заказ. Каждый заказ связан с моделью Users :

  $this->belongsTo('Users', [ 'foreignKey' => 'user_id', 'joinType' => 'INNER' ]); 

Когда я searchConfiguration() свой searchConfiguration() в файле OrdersTable.php меня есть следующее:

  ->value('first_name', [ 'field' => $this->aliasField('Users.first_name') ]) ->value('last_name', [ 'field' => $this->aliasField('Users.last_name') ]) 

Метод index ()

  $query = $this->Orders->find('search', $this->Orders->filterParams($this->request->query))->contain(['Users', 'PaymentMethods', 'Industries'] )->order(['Orders.created' => 'DESC']); $this->set('orders', $this->paginate($query)); 

Это загружается отлично, когда я не передаю какие-либо параметры для запроса, однако, как только я попытаюсь выполнить поиск по first_name или last_name я получаю ошибку:

Ошибка: SQLSTATE [42S22]: столбец не найден: 1054 Неизвестный столбец 'Orders.Users.first_name' в 'where clause'

Исходя из этой ошибки, она добавляет ордеры. в поле, которое я пытаюсь выполнить. Из того, что я могу сказать, CakePHP имеет 2 метода aliasField() один в \var\www\<project_name>\vendors\cakephp\cakephp\src\ORM\Query.php

 public function aliasField($field, $alias = null) { $namespaced = strpos($field, '.') !== false; $aliasedField = $field; if ($namespaced) { list($alias, $field) = explode('.', $field); } if (!$alias) { $alias = $this->repository()->alias(); } $key = sprintf('%s__%s', $alias, $field); if (!$namespaced) { $aliasedField = $alias . '.' . $field; } return [$key => $aliasedField]; } 

И один в \var\www\<project_name>\vendors\cakephp\cakephp\src\ORM\Table.php

 public function aliasField($field) { return $this->alias() . '.' . $field; } 

Похоже, что Query.php позволит вам указать $alias для поля, однако Table.php этого не делает, поэтому я предполагаю, что это метод, который используется здесь.

Может ли кто-нибудь дать мне рекомендации относительно того, как фильтровать данные, содержащиеся в связанной таблице?

Просто не используйте aliasField() когда вы уже поставляете псевдоним

 'field' => 'Users.first_name' 

или используйте aliasField() в соответствующей таблице Users

 'field' => $this->Users->target()->aliasField('first_name') 

Использование Query::aliasField() было бы совершенно неправильным, так как это вернет массив key => value для использования с Query::select() .