Codeigniter-如何进行内部联接?

时间:2018-07-07 09:22:07

标签: php codeigniter model inner-join codeigniter-3

我想在不动产表和不动产类型表之间进行内部联接。我创建了一个编辑页面,但是我想按cusId显示客户信息。我可以从遗产表中提取数据。但是不动产类型在不动产表中。我在不动产类型表中持有不动产类型名称。当我从Estate表中调用estateType时,仅显示number(1,2,3)但我想从estatetype表中显示其名称。我该怎么办?

我想通过房地产类型表中的ID显示客户房地产信息。但是我不能这样做。

控制器:

$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;

1 个答案:

答案 0 :(得分: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 /

使用助手


将此内容加载到您的控制器

$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>