Cómo filtrar datos asociados con el plugin de búsqueda FriendsOfCake para CakePHP 3.1.0

Plugin: FriendsOfCake\Search

 CakePHP: 3.1.0 

Actualmente estoy agregando la capacidad de filtrar mi controlador de órdenes en el método index() . Necesito poder buscar Pedidos a mi nombre del Usuario que realizó el pedido. Cada orden está asociada con el modelo de Users :

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

Cuando construyo mi método OrdersTable.php searchConfiguration() en el archivo OrdersTable.php , tengo lo siguiente:

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

El método de Órdenes 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)); 

Esto funciona bien cuando no estoy pasando ningún parámetro a la consulta, sin embargo, tan pronto como trato de buscar por first_name o last_name recibo el error:

Error: SQLSTATE [42S22]: Columna no encontrada: 1054 Columna desconocida ‘Orders.Users.first_name’ en ‘where clause’

En función del error, se añaden pedidos. al campo por el que estoy tratando de buscar Por lo que puedo decir, CakePHP tiene 2 métodos aliasField() uno en \var\www\\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]; } 

Y uno en \var\www\\vendors\cakephp\cakephp\src\ORM\Table.php

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

Parece que Query.php te permitirá especificar $alias para el campo, sin embargo, Table.php no lo hace, así que supongo que ese es el método que se está utilizando aquí.

¿Alguien puede darme orientación sobre cómo filtrar los datos contenidos en una tabla asociada?

    Simplemente no use aliasField() cuando ya está suministrando el alias

     'field' => 'Users.first_name' 

    o use aliasField() en la tabla de Users asociada

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

    Usar Query::aliasField() sería totalmente incorrecto, ya que esto devolverá una matriz key => value para usar con Query::select() .