我指的是这个文档:https://crud.readthedocs.io/en/latest/actions/index.html#findmethod
有没有办法把find方法放在控制器中,而不是放在App\Model\Table
中?
- 我想达到的目标:*
我想在index
操作中应用一个过滤器,这取决于某些条件。例如,这意味着Users
的分页应该只显示名称以特定字母开头的用户,并且当页面刷新时将提供该字母,并且该字母将始终更改。
如果不可能,有没有一种方法可以在从数据库加载任何数据之前应用此过滤器?
我在UsersController.php
中尝试了这段代码,但表总是显示所有行。我显然不明白这是怎么回事。
public function index()
{
$users = $this->paginate($this->Users->find()->where(["id" => 1] ));
$this->set(compact("users"));
return $this->Crud->execute();
}
但是,当-为了测试-我在where
条件中使用未知字段[例如bar
]时,我会得到这个- correct - error消息:
Column not found: 1054 Unknown column 'bar' in 'where clause'
因此,显然,应用了where条件,但由于某些原因,返回了所有行,而不是只有一行带有id = 1
。我错过了什么?
更新:
在查看了源代码之后,我看到字符串find
被设置为finder方法名的前缀,所以任何其他范围都是不可能的。也许在更新中可以考虑这一点。
现在我有两种可能性:
1.将其添加到表文件中。
1.在Controller
中设置一个过滤器,但我仍然没有弄清楚它是如何工作的。即使我在$event
中设置了beforePagination
,使用setData( "query", $this->Users->find()->where( ["id" => 1])
,这也会被忽略。
1条答案
按热度按时间mhd8tkvw1#
问题#2的解决方案:
在
UsersController.php
的index()
方法中添加以下内容: