Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关键字的CakePHP查询不返回结果_Php_Database_Cakephp - Fatal编程技术网

关键字的CakePHP查询不返回结果

关键字的CakePHP查询不返回结果,php,database,cakephp,Php,Database,Cakephp,我正在为我的网站建立一个基本目录。我希望我的用户能够通过数据的三个不同方面搜索条目。关键字($keyword)、状态($state)和公司类型($service\u id)。我可以获取$service\u id和$state以返回正确的结果,因为它们是带有固定数据的下拉列表。问题是$关键字。如果只使用一个字母,$keyword将返回一些内容。但当这封信可能出现在几乎所有的列表中时,它只会返回一个列表 这是我的DirectoryController.php文件: <?php // src/C

我正在为我的网站建立一个基本目录。我希望我的用户能够通过数据的三个不同方面搜索条目。关键字(
$keyword
)、状态(
$state
)和公司类型(
$service\u id
)。我可以获取
$service\u id
$state
以返回正确的结果,因为它们是带有固定数据的下拉列表。问题是
$关键字
。如果只使用一个字母,
$keyword
将返回一些内容。但当这封信可能出现在几乎所有的列表中时,它只会返回一个列表

这是我的DirectoryController.php文件:

<?php
// src/Controller/DirectoryController.php

namespace App\Controller;

use Cake\Network\Exception\NotFoundException;

class DirectoryController extends AppController {

public function initialize()
{
    parent::initialize();
    global $state_ids;
    if(PREFIX == 'ne') {
        $state_ids = array(
            'CT' => "Connecticut",
            'ME' => "Maine",
            'MA' => "Massachusetts",
            'NH' => "New Hampshire",
            'RI' => "Rhode Island",
            'VT' => "Vermont"
        );
    } else {
        $state_ids = array(
            'UPS' => "Upstate New York",
            'NYC' => "New York City",
            'LI' => "Long Island"
        );
    }
    global $service_ids;
    $service_ids = array( 
        '1'=>"Auctions",
        '2'=>"Brokers",
        '3'=>"Building Services",
        '4'=>"Construction",
        '5'=>"Design Build",
        '6'=>"Economic Development",
        '7'=>"Finance",
        '8'=>"Professional Services",
        '9'=>"Sub Contractors"
    );
}

public function index() {
    $this->load_ads();

    $this->set('title_for_layout', 'Directory');
    $this->loadModel('Directory');

    $captcha_int = 6;

    if (!empty($this->request->query('keyword')) && $this->request->query('captcha') == $captcha_int) {
        $keyword = $this->request->query('keyword');
    } else {
        $keyword = '';
    }
    $this->set('keyword', $keyword);

    if(is_array($this->request->query('service_ids')) && $this->request->query('captcha') == $captcha_int) {
        //Service array
        $cat_array_services = $this->request->query('service_ids');
        $cat_final_services = implode(',', $cat_array_services);
        $service = $cat_final_services;
        $selected_service_ids = explode(',', $service);
    } else {
        $selected_service_ids = '';
        $service = $this->request->query('service_ids');
    }
    $this->set('selected_service_ids', $selected_service_ids);

    if(is_array($this->request->query('service_ids')) && $this->request->query('captcha') == $captcha_int) {
        //State array
        $cat_array_states = $this->request->query('state_ids');
        $cat_final_states = implode(',', $cat_array_states);
        $state = $cat_final_states;
        $selected_state_ids = explode(',', $state);
        $this->set('selected_state_ids', $selected_state_ids);
    } else {
        $selected_state_ids = '';
        $state = $this->request->query('state_ids');
    }
    $this->set('selected_state_ids', $selected_state_ids);

    $service_ids = $GLOBALS['service_ids'];
    $this->set(compact('service_ids'));

    $services_sidebar = '';
    foreach($service_ids as $key => $value) {
        $count = $this->services_count($key);
        $services_sidebar[] = ['id' => $key, 'title' => $value, 'count' => $count];
    }
    $this->set('services_sidebar', $services_sidebar);

    $state_ids = $GLOBALS['state_ids'];
    $this->set(compact('state_ids'));

    if(empty($service) & empty($state)) {
        $directory_items = $this->Directory->find('all')->where([
            ['Directory.title LIKE' => "%".$keyword."%"],
            ['Directory.body LIKE' => "%".$keyword."%"],
            ['Directory.address LIKE' => "%".$keyword."%"],
            ['Directory.phone LIKE' => "%".$keyword."%"],
            ['Directory.website LIKE' => "%".$keyword."%"],
        ])->order(['logo' => 'DESC']);
    } elseif(empty($keyword) & empty($state)) {
        $directory_items = $this->Directory->find('all')->where([
            'OR' => [
                ['Directory.service_ids LIKE' => "%".$service."%"]
            ]
        ])->order(['logo' => 'DESC']);
    } elseif(empty($keyword) & empty($service)) {
        $directory_items = $this->Directory->find('all')->where([
            'OR' => [
                ['Directory.state_ids LIKE' => "%".$state."%"]
            ]
        ])->order(['logo' => 'DESC']);
    } elseif(empty($state)) {
        $directory_items = $this->Directory->find('all')->where([
            'OR' => [
                ['Directory.title LIKE' => "%".$keyword."%"],
                ['Directory.body LIKE' => "%".$keyword."%"],
                ['Directory.address LIKE' => "%".$keyword."%"],
                ['Directory.phone LIKE' => "%".$keyword."%"],
                ['Directory.website LIKE' => "%".$keyword."%"],
                ['Directory.service_ids LIKE' => "%".$service."%"]
            ]
        ])->order(['logo' => 'DESC']);
    } elseif(empty($service)) {
        $directory_items = $this->Directory->find('all')->where([
            'OR' => [
                ['Directory.title LIKE' => "%".$keyword."%"],
                ['Directory.body LIKE' => "%".$keyword."%"],
                ['Directory.address LIKE' => "%".$keyword."%"],
                ['Directory.phone LIKE' => "%".$keyword."%"],
                ['Directory.website LIKE' => "%".$keyword."%"],
                ['Directory.state_ids LIKE' => "%".$state."%"]
            ]
        ])->order(['logo' => 'DESC']);
    } elseif(empty($keyword)) {
        $directory_items = $this->Directory->find('all')->where([
            'OR' => [
                ['Directory.service_ids LIKE' => "%".$service."%"],
                ['Directory.state_ids LIKE' => "%".$state."%"]
            ]
        ])->order(['logo' => 'DESC']);
    } else {
        $directory_items = $this->Directory->find('all')->where([
            'OR' => [
                ['Directory.title LIKE' => "%".$keyword."%"],
                ['Directory.body LIKE' => "%".$keyword."%"],
                ['Directory.address LIKE' => "%".$keyword."%"],
                ['Directory.phone LIKE' => "%".$keyword."%"],
                ['Directory.website LIKE' => "%".$keyword."%"],
                ['Directory.service_ids LIKE' => "%".$service."%"],
                ['Directory.state_ids LIKE' => "%".$state."%"]
            ]
        ])->order(['logo' => 'DESC']);
    }

    $directory_list = $this->paginate($directory_items);
    $this->set(compact('directory_list'));
}

public function view($slug = NULL) {
    $this->load_ads();
    $this->loadModel('Directory');
    $directory = $this->Directory->find('all')->where(['Directory.slug' => $slug])->first();
    $this->set('title_for_layout', $directory->title);
    if (empty($directory)) {
        throw new NotFoundException('Could not find that directory listing.');
    }
    $this->set('directory', $directory);
    $this->loadModel('Story');
    $directory_stories = $this->Story->find('all')->where(['Story.body LIKE' => '%'.htmlspecialchars($directory->title).'%', 'remove_from_directory' => 0])->limit(5)->order(['id' => 'DESC']);
    $this->set('directory_stories', $directory_stories);
}

public function services_count($service_id) {
    $services = $this->Directory->find('all')->where(['Directory.service_ids LIKE' => '%'.$service_id.'%']);
    $services_count = $services->count();
    return $services_count;
}




为了感谢@ndm,他注意到我需要在我的第一组条件中添加一个
。碰巧是
$keyword
变量没有返回任何结果。

您可能应该稍微清理一下这种情况,这是相当多的重复。检查生成的SQL,例如,您的一个路径不使用
来处理
类似的
条件。@ndm就是这样,它可以工作!我知道,这有点多余。一般来说,php还是新手。一旦我学到更多,我可能会在我的身体状况上投入更多的时间。现在我真的只是想让它发挥作用。谢谢你的帮助。
<h1 class="page-header">Directory</h1>
<div class="panel panel-default intro_box">
<div class="panel-body">
    Welcome to the Directory.
</div>
</div>
<div class="row">
<div class="col-sm-8">
<?php
echo $this->Form->create('', array('type' => 'get', 'enctype'=>'multipart/form-data'));

echo '<div class="form-group">';
echo $this->Form->input('keyword', array('class' => 'form-control', 'type' => 'text', 'placeholder' => 'Please enter a keyword...', 'value' => $keyword));
echo '</div>';

echo '<div class="form-group">';
echo $this->Form->input('service_ids', array('class' => 'form-control', 'id' => 'service_ids', 'label' => 'Service', 'empty' => 'Please choose', 'options' => $service_ids));
echo '</div>';

echo '<div class="form-group">';
echo $this->Form->input('state_ids', array('class' => 'form-control', 'id' => 'state_ids', 'label' => 'State', 'empty' => 'Please choose', 'options' => $state_ids));
echo '</div>';

echo '<div class="form-group">';
echo '<div class="row">';
echo '<div class="col-md-8">';
echo $this->Form->input('captcha', array('class' => 'form-control', 'type' => 'text', 'placeholder' => 'CAPTCHA', 'required' => true));
echo '</div>';
echo '<div class="col-md-4">';
echo '<br /><p>+ 5 = 11</p>';
echo '</div>';
echo '</div>';
echo '</div>';

echo $this->Form->submit('Submit', array('class' => 'btn btn-primary'));
echo $this->Form->end();
?>
</div>
<div class="col-sm-4">
    <?php
    echo '<div class="list-group">';
    foreach($services_sidebar as $service) {
        echo '<a class="list-group-item" href="'.BASE_URL.'/directory?service_ids='.$service['id'].'">'.$service['title'].' <span class="badge">'.$service['count'].'</span> 
</a>';
    }
    echo '</div>';
    ?>
</div>
</div>
<br />
<br />
<div class="table-responsive">
<table class="table table-striped table-hover">
    <tbody>
    <?php foreach($directory_list as $directory_item) {
        echo '<tr>';
        echo '<td>';
        if(!empty($directory_item->logo)) {
            echo '<a href="'.BASE_URL.'/directory/'.$directory_item->slug.'">';
            echo '<img class="img-responsive center-block" src="'.$directory_item->logo.'"/>';
            echo '</a>';
        }
        $body = substr($directory_item->body,0,50);
        echo '<a href="'.BASE_URL.'/directory/'.$directory_item->slug.'">'.$directory_item- 
>title.'</a>';
        if(!empty($directory_item->address)) {
            echo '<div>' . nl2br($directory_item->address) . '</div>';
        }
        if(!empty($directory_item->address2)) {
            echo '<div>' . nl2br($directory_item->address2) . '</div>';
        }
        echo '<div>'.$body.' <a href="'.BASE_URL.'/directory/'.$directory_item->slug.'">Read More... 
</a></div>';
        echo '</td>';
        echo '</tr>';
    }
    ?>
    </tbody>
</table>
</div>
<ul class="pagination">
<?php
echo $this->Paginator->prev(__('prev'), array('tag' => 'li'), null, array('tag' => 'li','class' => 'disabled','disabledTag' => 'a'));
echo $this->Paginator->numbers(array('separator' => '','currentTag' => 'a', 'currentClass' => 'active','tag' => 'li','first' => 1));
echo $this->Paginator->next(__('next'), array('tag' => 'li','currentClass' => 'disabled'), null, array('tag' => 'li','class' => 'disabled','disabledTag' => 'a'));
?>
</ul>