【问题标题】:searching not work in cakephp-3搜索在 cakephp-3 中不起作用
【发布时间】:2016-07-20 09:00:04
【问题描述】:

我想通过搜索输入从数据库中搜索我的数据,一切正常,但我找不到为什么这段代码不起作用。当我在输入框中输入搜索数据时,任何事情都完成了。请帮助

我的控制器:AdUnitsController

 class AdUnitsController extends AppController

{

public function index()
{

    $query = $this->_getData();
    $this->set('adUnits', $this->paginate($query));

    $this->paginate = [
        'contain' => ['Networks', 'Games', 'AdTypes']
    ];

    $adUnits = $this->paginate($this->AdUnits);

    $this->set(compact('adUnits'));
    $this->set('_serialize', ['adUnits']);

}

public function _getData()
{
    if (!empty($this->request->data['search'])) {
        $search = $this->request->data['search'];
        $query = $this->AdUnits->find('All')->where([
            'OR' => [
                ['name LIKE' => '%' . $search . '%'],
            ],
        ]);
    }
    else{
        $query = $this->AdUnits->find('All');
    }
    return $query;
}

我的视图 index.ctp:

        <label> Search</label>
        <?php echo $this->Form->create('AdUnits',array('id' => 'site-search','url'=>array('action'=>'index')));?>
        <div>
            <?php echo $this->Form->input('search',array('class' => 'form-control', 'label' =>false, 'placeholder' => 'Type Network')); ?>
        </div>

        <div> <button type="submit"> Search</button>

            <?php echo $this->Form->end();?>

那里搜索不起作用。请帮助

【问题讨论】:

  • 你分页两次,我不知道为什么。在paginate() 调用之前设置分页数组,然后删除第二个分页调用
  • 问问自己为什么要分页两次并将 $adUnits 的值设置为两倍。第二个覆盖了第一个并且没用。
  • 不工作是什么意思?你有什么错误吗?
  • 所以启用调试模式,请告诉我们您遇到了什么错误
  • 所以去阅读手册hereherehere

标签: cakephp phpmyadmin cakephp-3.2


【解决方案1】:

首先要简化您的代码:您正在毫无理由地进行两次分页

public function index()
{
    $this->paginate = [
        'contain' => ['Networks', 'Games', 'AdTypes']
    ];
    $query = $this->_getData();
    $this->set('adUnits', $this->paginate($query));

} 

如果您仍然遇到问题,您的查询可能有错误。我的猜测是 name 列是模棱两可的,所以在你的 find() 调用中这样做

['AdUnits.name LIKE' => '%' . $search . '%']

作为旁注,我建议您阅读文档,尤其是学习如何调试代码。

在我看来,_getData 方法也应该移到模型或组件中。

【讨论】:

    【解决方案2】:
    public function index()
    {
    
        $query = $this->_getData();
        $this->set('adUnits', $this->paginate($query));
    
        $this->paginate = [
            'contain' => ['Networks', 'Games', 'AdTypes']
        ];
    
        $adUnits = $this->paginate($this->AdUnits);
    
        $this->set(compact('adUnits'));
        $this->set('_serialize', ['adUnits']);
    
    }
    

    替换为

        public function index()
    {
        $this->paginate = [
            'contain' => ['Networks', 'Games', 'AdTypes']
        ];
        $query = $this->_getData();
        $this->set('adUnits', $this->paginate($query));
    
    }
    

    【讨论】:

    • 谢谢,但用此代码替换后出现错误。“错误:发生内部错误。”
    • 你的调试模式开启了吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-30
    • 1970-01-01
    • 1970-01-01
    • 2017-12-22
    相关资源
    最近更新 更多