0

我试图在选择单行时让连接工作。这是我的代码:

模型:

          function view($id) {
            $this->db->select('c.name
                                ,c.phone
                                ,c.active
                                ,c.website
                                ,c.date_acquired
                                ,con.firstName');
            $this->db->from('company c');
            $this->db->join('contacts con','c.primary_contact = con.id','left');
            $this->db->where('id', $id);
            $query = $this->db->get();
            return $query->row_array();

控制器:

public function view($id)
{

    $this->load->model('Company_model');
    $data['data']= $this->Company_model->view($id);
    $this->load->view('templates/header');
    $this->load->view('company/view', $data);
    $this->load->view('templates/footer');

}

我得到的错误是:

致命错误:在第 35 行的 /home/techf/public_html/application/models/company_model.php 中的非对象上调用成员函数 row_array()

上面代码中的第 35 行是:

$query = $this->db->get()

在处理连接和行数组时这不正确吗?

**

编辑 1

**:

这是我的控制器:

public function view($id)
{

    $this->load->model('Company_model');
    $data = $this->Company_model->view($id)->row();
    $this->load->view('templates/header');
    $this->load->view('company/view', $data);
    $this->load->view('templates/footer');

}

和我的模型:

function view($id) {
            $this->db->select('*');
            $this->db->from('company');
            $this->db->join('contacts con','c.primary_contact = con.id','left');
            $this->db->where('id', $id);
            return $this->db->get('company');
 }

但现在我收到错误:

致命错误:在第 21 行的 /home/techf/public_html/application/controllers/company.php 中的非对象上调用成员函数 row()

4

3 回答 3

0

给你型号代码

        public function get_joins($table,$value,$joins,$where,$order_by,$order)
    {
        $this->db->select($value);
         if (is_array($joins) && count($joins) > 0)
          {
             foreach($joins as $k => $v)
               {
                $this->db->join($v['table'], $v['condition'], $v['jointype']);
               }
          }
         $this->db->order_by($order_by,$order);
         $this->db->where($where);
        return $this->db->get($table);
     }




    and in your controller aceess it like

   $value=('restaurantorders.*,restaurant.Name,restaurant.CurrencyId,currency.*,orderpaymentdetail.Gateway ');
        $joins = array
        (
                  array
                (
                  'table' => 'tk_restaurant',
                  'condition' => 'restaurant.Id = restaurantorders.RestaurantId',
                  'jointype' => 'inner'
                 ),
                  array
                (
                  'table' => 'tk_currency',
                  'condition' => 'restaurant.CurrencyId = currency.Id',
                  'jointype' => 'inner'
                 ),
                   array
                (
                  'table' => 'tk_orderpaymentdetail',
                  'condition' => 'restaurantorders.Id = orderpaymentdetail.OrderId',
                  'jointype' => 'inner'
                 ),
        );

        $data['order_detail'] = $this->general_model->get_joins($data['tbl'],$value,$joins,array('OrderStatus'=>'Confirm','restaurantorders.Id'=>$orderid),'restaurantorders.Id','desc')->row();

于 2013-06-08T05:43:17.230 回答
0

请注意,在模型上,我首先测试 ifnum_rows()是否大于 1,然后再发送rowand if not return false

请注意,我this->db->get删除了表的名称,因为您已经在 from 方法中添加了它。

        $this->db->select('*')
                ->from('company c');
                ->join('contacts con','c.primary_contact = con.id','left');
                ->where('id', $id);
        $query = $this->db->get();
        return $query->num_rows() >= 1 ? $query->row() : FALSE;

在您忘记添加的变量上的控制器 上,这将在您访问您正在查看的变量/对象时使用,例如datakey$data['contacts']

public function view($id)
{

    $this->load->model('Company_model');
    $data['contacts'] = $this->Company_model->view($id);
    $this->load->view('templates/header');
    $this->load->view('company/view', $data);
    $this->load->view('templates/footer');

}

在您的VIEWS上 访问contacts您之前在您的控制器上分配的密钥。

<?
 if(!empty($contacts))
{
   print_r($contacts);
}else{
   echo 'No data';
}


?>

在标准 MySQL 查询中显示查询的结构

你可以注释掉return你的模型,并在方法之后添加这段代码$this->db->get()

echo $this->db->last_query();
die();

这将回显查询的内容,您可以运行它phpmyadmin并比较返回的值是否正确。

于 2013-06-08T06:42:53.983 回答
0

你能像这样试试吗?

模型:(我不确定哪个表是 id 和哪个primary_contact,所以如果我犯了错误,请更改)

function view($id) {
    $this->db->join('contacts','company.primary_contact = contacts.id','left')
        ->where('id', $id);
    $query = $this->db->get('company');
    return $query->row();
}

在控制器中这样称呼它:

$data['result'] = $this->company_model->view($id);

然后访问视图中的对象:

<?=$result->id?> (etc.)
于 2013-06-08T19:05:45.180 回答