2016-03-20 25 views
2

Aşağıdaki gibi bir sorgum var ancak yalnızca tüm alanlara değil belirli alanlara ihtiyacım var. AutoFields öğesini false olarak ayarladım, ancak sorgu hala tüm alanları döndürüyor.Yalnızca cakephp3 içerisindeki seçili alanlar nasıl alınır

$tenancies = $this 
     ->find('all') 
     ->autoFields(false) 
     ->select([ 
      'Tenancy.id', 'Tenancy.created', 'Tenancy.stage', 
      'Properties.id', 'Properties.address1', 'Properties.postcode', 
      'Tenants.stage', 
     ]) 
     ->contain('Properties', function(\Cake\ORM\Query $query) { 
      return $query->where([ 
       'Properties.active' => 1 
      ]); 
     }) 
     ->contain(['Tenants']) 
     ->leftJoinWith('Tenants', function(\Cake\ORM\Query $query) { 
      return $query 
       ->autoFields(false) 
       ->select([ 
        'id', 'stage' 
       ]) 
       ->where([ 
        'Tenants.active' => 1 
       ]); 
     }) 
     ->where([ 
      'Tenancy.active' => 1, 
      $conditions 
     ]) 
     ->order([ 
      'Tenancy.created' => 'DESC', 
      'Tenants.tenancy_id' 
     ]) 
     ->group(['Properties.id']) 
     ->autoFields(false); 

    return $tenancies; 

Baskılar =>

object(App\Model\Entity\Tenancy) { 

    'id' => (int) 3934, 
    'created' => object(Cake\I18n\FrozenTime) { 

     'time' => '2016-03-20T18:25:20+00:00', 
     'timezone' => 'UTC', 
     'fixedNowTime' => false 

    }, 
    'stage' => (int) 2, 
    'tenants' => [ 
     (int) 0 => object(Cake\ORM\Entity) { 

      'id' => (int) 8922, 
      'user_id' => (int) 56456, 
      'tenancy_id' => (int) 3934, 
      'needs_guarantor' => true, 
      'guarantor_id' => null, 
      'holding_fee' => (float) 0, 
      ... 
      ... 

Not: İhtiyacım alanları seçebilirsiniz matching veya leftJoinWith kullanma ama ana cevap sensin contain

cevap

4

üzerinde çalışmıyor ilişkilendirmeleri doğru şekilde ayarlamanız gerekir. Dernekler doğru şekilde ayarlandığında, bunu basit olarak yazdırabilirsiniz.

return $this->find() 
       ->select([ 
        'Property.id', 'Property.company_id', 'Property.address1', 'Property.address2', 
        'Property.address3','Property.postcode', 
       ]) 
       ->contain([      
        'Tenancies' => function($q) { 
         return $q 
          ->select([ 
           'Tenancies.id','Tenancies.property_id','Tenancies.created', 
           'Tenancies.stage', 
          ]) 
          ->contain([ 
           'Tenants' => function($q) { 
            return $q 
             ->select([ 
              'Tenants.id', 'Tenants.stage', 'Tenants.tenancy_id', 'Tenants.holding_fee', 
             ]) 
             ->where([ 
              'active = 1', 
             ]); 
            } 
          ]) 
          ->contain([ 
           'Tenants' 
          ]) 
          ->where([ 
           'Tenancies.active = 1', 
          ]); 
        } 
       ]) 
       ->where(['Property.active = 1', $conditions]) 
       ->toArray(); 
+0

Onun benim için tam kullanımı. Çok teşekkür ederim!! –

İlgili konular