[PHP] Logica esatta sul mostrare contenuto se inattivo con Codeigniter

Marcolino92

Utente Attivo
6 Nov 2012
28
0
1
Ciao, dal titolo non sarà chiaro ma mi spiego.
La mia idea è quella di avere una tabella "Prodotti" e una "Featured" (in primo piano).
Nella prima ovviamente saranno presenti i prodotti, mentre nella seconda verrà inserito l'id prodotto e la data di inserimento.

Bene, per prelevare i prodotti inseriti in Featured e mostro i dettagli di ogni prodotto tramite un modello che invia l'id prodotto.

Tutto ok fino a qui, il problema nasce se il prodotto in questione è posto nello status 2 (inattivo), si vengono a creare degli errori giustamente.

In teoria so dove sbaglio, dove è il problema ma non riesco a creare un giusto controllo.
Lascio il modello e view per capire meglio:

Model

Codice:
public function get_featured($limit){
        $this->db->select('*');
        $this->db->from('featured');
        $this->db->order_by('dataInsert', 'DESC');
        $this->db->limit($limit);
        $query = $this->db->get();
        return $query->result_array();
    }

View
Codice:
// crea il ciclo degli inserimenti in featured
foreach($featured as $item):
// il modello che preleva i dettagli del prodotto in base ad ogni idProduct
    $product = $this->default_model->get_single_product_by_id($item['idProduct']);
 
Ti sei dimenticato i controller?

In questo modo recuperi direttamente tutti i dati.
PHP:
public function get_featured($limit){
      return  $this->db->select('featured.*,Prodotti.*')
       ->join('Prodotti','Prodotti.id = featured.idProdotto')
      ->where('Prodotti.status <',2)
      ->order_by('featured.dataInsert','DESC')
      ->limit($limit)
      ->get('featured')
      ->result_array();
}
Altro modo per sfruttare i cicli
PHP:
private $data=[];
public $filter=[];
public function get_featured($limit){
        $this->data=$this->db->select('featured.*,Prodotti.id,Prodotti.status')
       ->join('Prodotti','Prodotti.id = featured.idProdotto')
      ->where('Prodotti.status <',2)
      ->order_by('featured.dataInsert','DESC')
      ->limit($limit)
      ->get('featured')
      ->result_array();
    return $this->resolvAllResults()->data;
}

private function resolvAllResults(){
     foreach($this->data as $k=>$v){
            $this->filter=['id'=>$v['idProdotto']];
           $this->data[$k]['product']=$this->getProduct();
    }
     return $this;
}

private function getProduct(){
      $this->db->select('*');
      foreach($this->filter as $k=>$v){
              $this->db->where($k,$v);
      }
     return $this->db->get('Prodotti')->result_array();
}
 
Ultima modifica:
Grazie mille, mi hai risolto il problema.
Visto che sto imparando e il fatto di utilizzare Join abbia risolto così facilmente la logica di quello che avevo bisogno, se vuoi potresti spiegarmi il suo utilizzo? Di base ho capito ovviamente il suo utilizzo ed uso, ma sapere nel dettaglio come e dove puo essere utilizzato è sempre qualcosa in più.

Grazie ancora
 

Discussioni simili