Я использую плагин friendsOfCake / search с CakePHP 3.8.
У меня есть две таблицы, которым нравится
Strains
Name | user_id
-----------------
Strain1 | 1
Strain2 | 1
Strain3 | 2
Пользователи
Name | id
-----------------
Peter | 1
Max | 2
, где Strains.user_id
относится к столбцам id
в таблице Users
.
Я хочу создать маску поиска, гдеЯ могу искать имя пользователя, и результатом должен быть список штаммов, которые были созданы этим пользователем. Например, если я введу «Питер», результатом будут «Strain1» и «Strain2».
Согласно https://github.com/FriendsOfCake/search/tree/master/docs#options я написал следующий код
StrainsTable.php
public function initialize(array $config)
{
parent::initialize($config);
$this->addBehavior('Search.Search');
$this->searchManager()
->value ('user_id')
->like ('q', [ // q is the name of the input field in the view
'fields' => ['Users.name'],
'beforeProcess' => function (\Cake\ORM\Query $query, array $args, \Search\Model\Filter\Base $filter) {
$query->contain('Users');
},
]);
...
}
StrainsController.php
public function index()
{
$query = $this->Strains
->find ('search', ['search' => $this->request->getQueryParams()]);
debug($query);
$this->set('strains', $this->paginate($query));
}
Я получаю сообщение об ошибке Ошибка: SQLSTATE [42S22]: Столбец не найден: 1054 Неизвестный столбец 'Strains.q' в 'выражении where'
Созданный SQL-запрос - это
SELECT Strains.name AS `Strains__name`, Strains.user_id AS `Strains__user_id`, Users.id AS `Users__id`, Users.name AS `Users__name` FROM strains Strains INNER JOIN users Users ON Users.id = (Strains.user_id) WHERE Strains.q like :c0
, где c0 - значение q.
Я рад любой помощи.