简体   繁体   中英

How to pass multiple array of Id in where condition codeigniter?

I want to pass multiple id in where condition how to do it?

A query fetches org_id from database.

now I want to pass that in my where condition, so how to do it?

I tried foreach loop:

Below is my code :

$devices =  $this->activation_m->get_activated_devices();


    $org_id = array(); // create org_id array
        foreach ($devices as $row)
        {

         $org_id[]= $row['org_id']; // assign ids into array

            //$companys =$this->data['devices'] = $this->activation_m->get_company($org_id); // don't call again and again
        }

     //Now $org_id is array


    $companys =$this->data['devices'] = $this->activation_m->get_company($org_id);  
    echo $this->db->last_query();

Model Code

    public function get_activated_devices()
    {
        $this->db->select('*');
        $this->db->join('sitekey','sitekey.site_key = activation.site_key');
        $this->db->from('activation');
        $query =$this->db->get();
        $result = $query->result_array(); 
        return $result; 




    }

    public function get_company($org_id)
    {

        $this->db->select('*');
        $this->db->join('sitekey','sitekey.org_id = company.id');
        $this->db->join('activation','sitekey.site_key = activation.site_key');
        $this->db->where('company.id IN',(implode(',',$org_id))); // see the change here
        $this->db->from('company');
        $query =$this->db->get();
        $result = $query->result_array(); 
        return $result; 
    }

now currently my query passes only one org_id , I want to pass all the org_id I get from my first query.

You can use where_in from active-records codeigniter

as

$devices =  $this->activation_m->get_activated_devices();
$org_id = array();  
foreach ($devices as $row)
{    
 $org_id[] = $row['org_id'];           
}
 $companys =$this->data['devices'] = $this->activation_m->get_company($org_id);
if( $companys->num_rows() > 0 )
{
   echo "<pre>";
   print_r( $companys->result());
   echo "</pre>";
}

And for Model

public function get_company($org_ids = array())
{
    $this->db->select('*');
    $this->db->join('sitekey','sitekey.org_id = company.id');
    $this->db->join('activation','sitekey.site_key = activation.site_key');
    $this->db->where_in('company.id', $org_ids );  //this is condition       
    $this->db->from('company');
    return $this->db->get();
}

You can use codeigniter's $this->db->or_where() for the purpose. Just traverse the array of organization id's and apply or_where conditions.

    $this->db->select('*');
    $this->db->join('sitekey','sitekey.org_id = company.id');
    $this->db->join('activation','sitekey.site_key = activation.site_key');
    foreach($org_id as $org)
    {    // where $org is the instance of one object of active record
         $this->db->or_where('company.id',$org);
    }
    $this->db->from('company');
    $query =$this->db->get();
    $result = $query->result_array(); 
    return $result; 

Another way to do this is to make a custom query by traversing the array like this and appending where clauses in string.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM