【问题标题】:Codeigniter - How to inner join?Codeigniter - 如何内部加入?
【发布时间】:2018-12-15 17:33:10
【问题描述】:

我想在房地产表和房地产类型表之间进行内部连接。我制作了一个编辑页面,但我想按 cusId 显示客户信息。我可以从房地产表中提取数据。但是房地产表中的房地产类型。我在 Estatetype 表中保存了 EstateType 名称。当我从庄园表中调用庄园类型时,只显示数字(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);
    }

}

我想在视图中从房地产表中添加房地产类型时显示,从房地产类型中显示 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;

【问题讨论】:

  • 没有人可以帮助我吗?
  • 如果您需要特定类型的 JOIN,您可以通过函数的第三个参数指定它。选项有:左、右、外、内、左外、右外 $this->db->join('table2', table2.val = table1.val', 'inner');
  • 你能给我看看吗?我无法理解。
  • 你的数据库表是什么样子的?
  • 我在顶部添加了我的数据库表。

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


【解决方案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');

如果您在很多位置使用此帮助程序,您可以通过将其添加到自动加载配置文件(即&lt;your-web-app&gt;\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>

【讨论】:

  • 我什么也看不见。选择为空白。
  • 我只是调用了 EstateType 表的名称。只看名字。我可以使用内部联接来执行此操作吗?我认为我必须使用内部连接。你能举个内部连接的例子吗?
  • 我使用这个助手,但我看不到任何名称。 EstateTypeNameEn 在 Estatetype 表中。 EstateType 在庄园表中。
  • 您必须使用此函数调用您的 statetype 名称,例如 get_name('for_key','the name you want')
  • 有 2 张桌子。资产表之一是客户的资产信息,第二个是资产类型表。 Estatetype 有 EstateTypeNameEn(别墅、公寓等)。我想从 call Estatetype 表中显示这些名称。
猜你喜欢
  • 2014-08-31
  • 2013-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多