Плагин: FriendsOfCake\Search
CakePHP: 3.1.0
В настоящее время я добавляю возможность фильтровать мой контроллер заказов по методу index()
. Мне нужно иметь возможность искать заказы по имени пользователя, разместившего заказ. Каждый заказ связан с моделью Users
:
$this->belongsTo('Users', [
'foreignKey' => 'user_id',
'joinType' => 'INNER'
]);
Когда я создаю свой searchConfiguration()
метод в OrdersTable.php
файле, я получаю следующее:
->value('first_name', [
'field' => $this->aliasField('Users.first_name')
])
->value('last_name', [
'field' => $this->aliasField('Users.last_name')
])
Метод Orders 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
В зависимости от ошибки он добавляет заказы. в поле, по которому я пытаюсь выполнить поиск. Насколько я могу судить, 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 этого не делает, поэтому я предполагаю, что это метод, который здесь используется.
Может ли кто-нибудь дать мне руководство о том, как фильтровать данные, содержащиеся в связанной таблице?