Codeigniter - 如何内连接?

问题描述 投票:1回答:1

我想在estate表和estatetype表之间进行内部连接。我创建了一个编辑页面,但我希望通过cusId显示客户信息。我可以从房地产表中提取数据。但是庄园表中的estateType。我在estatetype表中保存了estateType名称。当我从庄园表中调用estateType时,只显示数字(1,2,3)但是我想从estatetype表中显示它们的名字。我怎么能这样做?

我想通过您在estatetype表中显示客户遗产信息。但我不能这样做。

控制器:

$viewData = new stdClass();

            $this->load->model('join_model');
            $viewData->estateList = $this->join_model->estatetypes();

            $viewData->customers = $this->db->where("cusId", $cusId)->get("customer")->row();
            $viewData->property = $this->db->where("cusId", $cusId)->get("estate")->row();
            $viewData->estype = $this->db->get("estatetype")->result();
            $viewData->heating = $this->db->get("heating")->result();
            $viewData->cities = $this->db->get("city")->result();
            $this->load->view('property_edit',$viewData);

模型:

<?php

class Join_model extends CI_Model {

    public function __construct()
    {
        parent::__construct();
    }

    public function estatetypes()
    {
        $this->db->select('estate.CusId,estate.estateType,estatetype.estateTypeId,estatetype.estateTypeAr,estatetype.estateTypeEng');
        $this->db->from('estate');
        $this->db->join('estatetype', 'estate.estateType = estatetype.estateTypeEng');

        $results = $this->db->get()->row();
        return $results;

        //return $this->db->get_where('users', array('userId' => $id), 1);
    }

}

我想显示当我从视图中的属性表添加estateType时,从estateType显示estataTypeEn。为此,我做了内部连接,但是当我将它添加到视图和控制器时。空无一物。我该怎么做呢?

视图:

<!-- Basic select -->
                                <div class="form-group">
                                    <label class="control-label col-lg-3">Estate Type <span class="text-danger">*</span></label>
                                    <div class="col-lg-9">
                                        <select name="estateType" class="form-control">
                                            <option value="<?php echo $property->estateType; ?>" readonly><?php echo $estateList->estateType; ?></option>
                                            <?php
                                            foreach($estype as $etype){ ?>
                                            <option value="<?php echo $etype->estateTypeId; ?>"><?php echo $etype->estateTypeEng; ?></option>
                                            <?php }?>
                                        </select>
                                    </div>
                                </div>

estatetype表(类型名称在这里)

CREATE TABLE `estatetype` (
  `estateTypeId` int(11) NOT NULL AUTO_INCREMENT,
  `estateTypeNameEn` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `estateTypeNameAr` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  PRIMARY KEY (`payTypeId`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

房地产表

 CREATE TABLE `estate` (
  `estateId` int(11) NOT NULL AUTO_INCREMENT,
  `CusId` int(11) DEFAULT NULL,
  `estateType` int(11) DEFAULT NULL COMMENT '',
  `estateCentare` varchar(6) COLLATE utf8_bin DEFAULT NULL,
  `estateRoom` varchar(2) COLLATE utf8_bin DEFAULT NULL COMMENT '',
  `estateSalon` varchar(2) COLLATE utf8_bin DEFAULT NULL COMMENT '',
  `estateBathroom` varchar(2) COLLATE utf8_bin DEFAULT NULL COMMENT '',
  `estateHeating` int(11) DEFAULT NULL COMMENT '',
  `estateCity` int(11) DEFAULT NULL COMMENT '',
  `estateAddress` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `estateCoord` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `estateGarden` tinyint(1) DEFAULT NULL COMMENT '',
  `estateBalcony` tinyint(1) DEFAULT NULL COMMENT '',
  `estatePackage` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `estatePackageDate` datetime DEFAULT NULL,
  `estatePackageUser` int(11) DEFAULT NULL,
  `estateCreateDate` datetime DEFAULT NULL,
  `estateCreateUser` int(11) DEFAULT NULL,
  `estateEditDate` datetime DEFAULT NULL,
  `estateEditUser` int(11) DEFAULT NULL,
  `estateDue` decimal(5,0) DEFAULT NULL,
  `estateImg` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  PRIMARY KEY (`estateId`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
php codeigniter model inner-join codeigniter-3
1个回答
1
投票

你不需要使用Join你可以创建一个custom_helper.php

CodeIgniter助手是一个具有多个功能的PHP文件。这不是一个阶级

创建一个文件并将以下代码放入其中。

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

if ( ! function_exists('get_name'))
{
    function get_name($id,$value)
    {
        $CI=& get_instance();
        $number_data = $CI->db->get_where('estatetype', array('estateTypeId' => $id))->num_rows();
        if($number_data > 0){
            $data = $CI->db->get_where('estatetype', array('estateTypeId' => $id))->row()->$value;
        }
        else{
            $data = translate('Not_Found');
        }
        return $data;
    }   
}

将此保存到application / helpers /。

Using The Helper


将其加载到控制器中

$this->load->helper('custom_helper');

如果您在许多位置使用此帮助程序,则可以通过将其添加到自动加载配置文件(即<your-web-app>\application\config\autoload.php)来自动加载。

$autoload['helper'] = array('custom_helper');

在您看来,您可以像这样调用此函数。

<select name="estateType" class="form-control">
<?php
$estype = $this->db->get("estate")->result_array();
foreach($estype as $row){ ?>
<option value="<?php echo $row['estateType']; ?>"><?php echo get_name($row['estateType'],'estateTypeNameEn'); ?></option>
<?php }?>
</select>

如果你想从表中获取其他表或其他列,你可以改变这样的函数。

function get_name($table,$field,$equal,$value)
{
    $CI=& get_instance();
    $number_data = $CI->db->get_where($table, array($field => $equal))->num_rows();
    if($number_data > 0){
        $data = $CI->db->get_where($table, array($field => $equal))->row()->$value;
    }
    else{
        $data = translate('Not_Found');
    }
    return $data;
}

在视图中你可以添加这个。

<select name="estateType" class="form-control">
<?php
$estype = $this->db->get("estate")->result_array();
foreach($estype as $row){ ?>
<option value="<?php echo $row['estateType']; ?>"><?php echo get_name('estatetype','estateTypeId',$row['estateType'],'estateTypeNameEn'); ?></option>
<?php }?>
</select>
© www.soinside.com 2019 - 2024. All rights reserved.