2017-01-06 2 views
0

테이블 'sanpham'과 'danhmuc'가 2 개 있습니다. 필자는 2 개의 테이블에서 데이터를 가져 오기 위해 phalcon 쿼리 빌더를 사용합니다.Phalcon 쿼리 빌더가 조인 된 테이블 데이터를 가져올 수 없습니다.

$laytin = $this->modelsManager->createBuilder() 
     ->from("sanpham") 
     ->innerJoin('danhmuc','sanpham.danhmuc=danhmuc.sodanhmuc') 
     ->where('sanpham.sosanpham = '.$id.'') 
     ->getQuery() 
     ->getSingleResult(); 
     $breadcrumbs = array('/' => Tool::getTranslation()->_('trangchu'),"/Loai-san-pham/".$laytin->tendep."/".$laytin->sodanhmuc => $laytin->tendanhmuc,'' => $laytin->tieudesanpham); 

쿼리가 표시되지 않습니다 'danhmuc'테이블 만 $ laytin-> tendep, $ laytin-> sodanhmuc, $ laytin-> tendanhmuc를 실행합니다. 'sanpham'테이블의 모든 열 (예 : $ laytin-> tieudesanpham)이 올바르게 표시됩니다.

+0

'$ this-> modelsManager-> createBuilder() -> columns ('danhmuc.tendep, danhmuc.sodanhmuc')'와 같은 것을 시도해보십시오. docs : https://docs.phalconphp.com/en/3.0.2/api/Phalcon_Mvc_Model_Query_Builder.html – Timothy

+0

감사합니다. 그것은 작동합니다! 하지만 나는 'sanpham'의 모든 열을 수동으로 입력해야합니다 (예 : columns ('danhmuc.tend ep, danhmuc.sodanhmuc, sanpham.tieudesanpham ..')). 왜 팔콘은 건축업자를 더 쉽게 만들지 못합니다. – chipheo83

+0

'-> columns ('*')' – Juri

답변

0

당신과 특정 열을 추가 할 수 있습니다

$this->modelsManager->createBuilder()->columns('danhmuc.tend‌​ep, danhmuc.sodanhmuc') 

을 당신이 당신의 출력에서 ​​원하는 각 열을 추가해야합니다이 방법. QueryBuilder docs. 또 다른 방법은 Sanpham 모델을 쿼리하는 것입니다. 예를 들어

:

class Sanpham extends \Phalcon\Mvc\Model 
{ 
    public static function findSomething($something) 
    { 
     // this is your actual query, it replaces the queryBuilder 
     return self::query() 
      ->where('sanpham.sosanpham = :id:', ['id' => $something]) 
      ->innerJoin('danhmuc', 'sanpham.danhmuc = danhmuc.sodanhmuc') 
      ->execute()->getFirst(); 
    } 

    public function initialize() 
    { 
     // define the relation to danhmuc 
     $this->belongsTo('danhmuc', 'danhmuc', 'sodanhmuc'); 
    } 
} 

class Danhmuc extends \Phalcon\Mvc\Model 
{ 
    public function initialize() 
    { 
     // there are other options besides "hasMany", like "hasOne". 
     // this is your relation to sanpham 
     $this->hasMany('sodanhmuc', 'sanpham', 'danhmuc'); 
    } 
} 

class YourController extends \Phalcon\Mvc\Controller 
{ 
    public function testAction() 
    { 
     // get your first record in Sanpham matching "12345" 
     $sanpham = Sanpham::findSomething(12345); 

     // from your Sanpham object, get the related danhmuc object. 
     // this works because we defined the relations (belongsTo and hasMany) 
     $danhmuc = $sanpham->getRelated('danhmuc'); 

     // now you have access to the values of danhmuc via the $danhmuc variable 
     $breadcrumbs = [ 
      '/'         => Tool::getTranslation()->_('trangchu'), 
      "/Loai-san-pham/" . $danhmuc->tendep => $danhmuc->tendanhmuc, 
      ''         => $danhmuc->tieudesanpham, 
     ]; 
    } 
} 

확인이에 대한 추가 정보를위한 Phalcon model docs.

+0

코드를 사용한 후에 오류가 발생합니다. 예외 : 알 수없는 모델 또는 별칭 'sanpham'(11)을 준비 할 때 : SELECT [Sanpham]. * FROM [Sanpham] INNER JOIN [danhmuc] ON sanpham.danhmuc = danhmuc.sodanhmuc WHERE sanpham.sosanpham = : id : – chipheo83

+0

'sanpham' 모델의 이름을 사용하십시오. – Timothy