-1

我是 CodeIgniter 的新手,在制作 URL 链接和显示数据库中的数据时遇到问题。

我有一个州(马萨诸塞州)的数据库。我在马萨诸塞州也有几个城市(波士顿、布罗克顿、剑桥和西牛顿)。

My Database is set up like this.
id, state, city,
1   Massachusetts Boston
2   Massachusetts Brockton
3   Massachusetts Cambridge 
4   Massachusetts West Newton

我的第一个目标是展示马萨诸塞州。我用下面的语法实现了我的目标。

我的问题是:当有人点击“马萨诸塞州”时,我想显示该州的城市。我该怎么做呢?下一步是什么?

我的控制器:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Site extends CI_Controller {

    public function index(){
        $this->load->model('model_data');
        $data["results"] = $this->model_data->getState();
        $this->load->view('view_home',$data); 
    }

}

我的模型:

class Model_data extends CI_Model{

    function getState(){
        $this->db->distinct();
        $this->db->select('state');
        $this->db->order_by('state','ASC');
        $query = $this->db->get('states');
        return $query->result();
        if ($query->num_rows() > 0){
            foreach($query->result() as $row){
                $data[] = $row;
            }
            return $data;
        }   
    }

}

我的观点_首页:

<?php echo doctype("html5");?>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Home View</title>
</head>
<?php
foreach ($results as $row){
    $state = $row->state;
    echo $state.'<br>';
    /*
    Notes to myself: Do I have to pass a URI segment? but do I pass the variable of $state
    */
    echo anchor("",$row->state,array('title'=>$row->state));
}
?>
<body>
</body>
</html>
4

2 回答 2

1

根据您当前的数据库,您可以在Site控制器中添加另一种方法来显示某个州的城市。首先,您的链接应该是这样的(使用Site控制器并getCities作为方法):

echo anchor('site/getCities/'.$row->state, $row->state, array('title'=>$row->state));

这将生成一个类似这样的链接:

<a href="http://yourDomain.com/site/getCities/Massachusetts" title="Massachusetts">Massachusetts</a>

或者像这个(取决于你.htaccess的 URL 重写文件):

<a href="http://yourDomain.com/index.php/site/getCities/Massachusetts" title="Massachusetts">Massachusetts</a>

现在您可以在Site控制器中添加一个方法,例如:

public function getCities($state = null)
{
    if(is_null($state)) return false;
    $this->load->model('Model_data');
    $data['cities'] = $this->getCitiesByState($state);
    $this->load->view('showCities');
}

在您的Model_data模型中,添加getCitiesByState按州名获取所有城市的方法:

public function getCitiesByState($state)
{
    // load database if not autoloaded
    // assumed, your table name is cities
    $query = $this->db->get_where('cities', array('state' => $state));
    if($query->num_rows()) return $query->result();
    return null;
}

然后在视图中(showCities.php):

if(isset($cities) && !is_null($cities))
{
    echo "Cities of " . $cities[0]->state . "<br />";
    foreach ($cities as $city)
    {
        echo $city->id . " " . $city->city . "<br />";
    }
}
于 2013-05-31T20:31:36.793 回答
0

$query = $this->db->get('states') - 不应该是 $query = $this->db->get('state')

foreach ($results as $row){ $state = $row->state->city; 回声$状态

并编辑您的函数以获取城市,或创建另一个函数以获取该州的城市。或者,将您的数据库表全部更改并按 ID 连接表并回显匹配 ID 的城市。

于 2013-05-31T15:44:30.333 回答