2016-04-13 18 views
0

Modelden bir alanın değerini ve ilgili alandan bir alanı birleştiren bir açılan listeyi (selectlist) görüntülemek istiyorum modeli. 'Kullanıcı' ve 'duraklama' tablosuna bağlı bir 'work_day' tablosu var. 'Duraklat' (ekle ve düzenle) görünümünde, working_day_id öğesini görüntüleyen bir açılır listeye sahibim ancak 'Çalışma Gün' alanlarının 'tarih' alanlarını ve 'Kullanıcı'nın' kullanıcı adı 'alanlarını görüntülemek istiyorum.

Örneğin: 13/04/2016 (jerome S).

Zaten $ virtualfield denedim, 'WorkingDay' alanından kullanıyorum ancak 'Kullanıcı' alanından kullandığımda çalışmaz, çalışır.Cakephp açılır liste (selectlist) + modelden bir modelin nasıl görüntüleneceği ve ilgili model

db schema

denedim $ virtualfield:

public $virtualFields = array('workingday_display_field' => 'concat(WorkingDay.date_working_day, " (", User.username, ")")'); 
public $displayField = 'workingday_display_field'; 

Ben de çözüm aşağıda önerilen ama çalışmıyor çalıştı aynı sorun oluşur:

public function __construct($id = false, $table = null, $ds = null) { 
    parent::__construct($id, $table, $ds); 
    $this->virtualFields['workingday_display_field'] = sprintf('concat(%s.date_working_day, " (", %s.username, ")")', $this->alias, $this->User->alias);  
    $this->displayField = "workingday_display_field"; 
} 

kimseyi mu Sorunu nasıl çözeceğimi biliyor musunuz?
Şimdiden teşekkürler.

public function __construct($id = false, $table = null, $ds = null) { 
    parent::__construct($id, $table, $ds); 
    $this->virtualFields['name'] = sprintf('CONCAT(%s.first_name, " ",%s.last_name)', $this->alias, $this->alias); 
    $this->virtualFields['namewithemail'] = sprintf('CONCAT(%s.first_name, " ", %s.last_name, " (", %s.email, ")")', $this->alias, $this->alias, $this->alias); 
    $this->displayField = "namewithemail"; 
} 

Bu kitabın bu bölümünde açıklanmaktadır:

cevap

0

Farklı tablolardan iki alanı birleştiren bir liste oluşturmam gereken benzer bir durum var. Yaptığım şey, uygun listeyi döndürmek için find() öğesini geçersiz kılıyordu.

public function find($type = 'first', $params = array()) { 
    $workingdays = array(); 

    if ($type == 'list'){ 
     $params = array_merge(
      array('contain' => array('User')), 
      $params 
     ); 
     $workingdaysUnformatted = parent::find('all', $params); 
     foreach($workingdaysUnformatted as $workingday){ 
      $workingdays['WorkingDay']['workingday_display_field'] = $workingday['WorkingDay']['date'].' ('.$workingday['User']['username'].')' 
     } 
    } 
    else 
     $workingdays = parent::find($type, $params); 

    return $workingdays; 
} 

İade etmek istediğiniz listeyi biçimlendirmek için bir klas yolu olabilir, ancak bu genel bir fikir göstermektedir.

İlgili konular