Bir baz CRUD modeli kullanarak bir kontrolör sorun

2 Cevap php

CodeIgniter'daki Ben bir base CRUD My_model kullanıyorum, ama benim göz-denetleyicisi bu küçük sorun var .. Benim $ veri ['mesaj'] "mesaj" olarak adlandırılan tablosundan tüm mesajları alır. Bu tablodaki yazar Ben kullanıcıların tablosundan adını kapmak için benim "GetUserName" fonksiyonu (kimliğinden adını alır) kullanmanız gerekir neden sadece bir User_id, olsa.

Sadece tek bir post olmadığı rağmen ben, buradan devam etmek nasıl bilmiyorum. Bu nedenle $ verilerin bir parçası olmak ya da kullanıcı adını gerekiyor ['mesaj'] dizi veya diğer bazı akıllı çözüm.

Bana yardımcı olabilecek kimse?

 function index() {
  $this->load->model('browse_model');

  $data['posts'] = $this->browse_model->get_all();
  $data['user'] = $this->browse_model->getusername(XX);

  $this->load->view('header');
  $this->load->view('browse/index', $data);
  $this->load->view('footer');
 }

2 Cevap

Aynı şeyi yapmak için alternatif bir yol:

function get_all()
{
   $this->db
       ->select('posts.*, u.username')
       ->join('users u', 'u.user_id=posts.user_id');

   return parent::get_all();
}

En iyi bahis mesaj masaya kullanıcıların tablo katılarak mesajları alınırken ilişkili kullanıcı almak olacaktır. Bu şekilde sadece tek bir veritabanı sorgu performans. Sen baz My_model bir get_all işlevi geçersiz olabilir.

function get_all()
{
    $sql = 'SELECT p.*, u.username
            FROM posts p
            JOIN users u ON u.user_id=p.user_id';

    $query = $this->db->query($sql);
    return $query->result();       
}

Her döndü sonrası nesne daha sonra bir kullanıcı adı özelliğine sahip olacak.

$posts = $this->browse_model->get_all();
foreach ($posts as $post)
{
    echo $post->username;
}