2

私はたき火/ciの初心者です。bf / ciモデルメソッドをチェーンして、次のSQLステートメントを再作成しようとしています。

        SELECT  prod_cat.cat_id, 
                prod_cat.prod_id, 
                prod.enabled, 
                prod.name,
                prod.prod_id,   
        FROM prod_cat, prod 
        WHERE prod.is_enabled = 1 
        AND prod_cat.cat_id =15 
        AND prod_cat.prod_id = prod.prod_id 
        ORDER BY prod.name DESC

私はbf/ciprod_modelとprod_cat_modelを持っています。

cat_id 15に一致するすべての製品を取得するには、次のように実行できることを知っています。たとえば、次のようになります。

 $this->load->model('cat/prod_cat_model');  
 $records = $this->prod_cat_model->find_all_by('cat_id' => $cid);

同様に、製品テーブルでfind_all_byを使用して、次のようにアクティブ/有効なレコードに制限する予定です。

 $this->prod_model->find_all_by('enabled', 1);

まず、テストとして、次のように配列をprod_modelに渡すことで、これら2つのコードを組み合わせようと考えていました。

  public function productsincategory($cid)
  {
    $this->load->model('cat/prod_cat_model');   
    $criteria = array(
    'enabled' => 1,
    'prod_id' => $this->prod_cat_model->find_all_by('cat_id', $cid)
    );
    $records = $this->prod_model->find_all_by($criteria) ;
  }

エラーメッセージが表示されます:

'where句'の不明な列'配列'

SELECT * FROM(prod)WHERE enabled= 1AND prod_id=配列

これは理にかなっています...しかし、「select * from prod where enabled = 1 and prod_id in(prod ids from prod_cat table)」のように修正する方法がわかりません。 )」しかし、それは焚き火によって認識されていないようです。ありがとう。

4

1 に答える 1

0

次のように、製品モデルに独自の where_in() メソッドを作成しました。

public function where_in($field=NULL, $value=NULL)
{
    if (!empty($field))
    {
        if (is_string($field))
        {
            $this->db->where_in($field, $value);
        }
        else if (is_array($field))
        {
            $this->db->where($field);
        }
    }

    return $this;

}//end where()

したがって、私のコントローラーでは、次のようなことを行います。

  public function productsincategory($cid)
  {
    $this->load->model('cat/prod_cat_model');  
    $this->prod_cat_model->where('cat_id', $cid);
    $records = $this->prod_cat_model->find_all();

 $prod_ids = array();

foreach($records as $record)
{
    array_push($prod_ids, $record->product_id);
}

    $this->prod_model->where_in('prod_id', $prod_ids) ; //call our own where_in method
$records = $this->prod_model->find_all();
  }
于 2013-02-03T20:00:30.157 に答える