CakePHP: Nasıl bu ilişkili tabloda mevcut olmayan tüm kayıtları dahil aramak bulmak değiştirebilirim?

1 Cevap php

Ben şu ilişkileri ile bir kaç tablo var:

Şirket hasMany İşler, Personel, ve Kamyon, Kullanıcılar

Ben bütün yabancı tablo 'Modeller ile birlikte doğru kurmak tuşları, Kontrolörleri ve Görüntüleme var.

Başlangıçta, İşler masa "atanmış" adlı bir boolean alan vardı. (JobsController itibaren) find işlemi başarıyla (containable davranışını kullanarak kullanıcıları dönmeden) not atanan ve tek bir şirket için belirli bir gününde düşmek tüm çalışanları, tüm kamyon ve herhangi bir iş verir :

$this->set('resources', $this->Job->Company->find('first', array(
  'conditions' => array(
    'Company.id' => $company_id
  ),
  'contain' => array(
    'Employee',
    'Truck',
    'Job' => array(
      'conditions' => array(
        'Job.assigned' => false,
        'Job.pickup_date' => date('Y-m-d', strtotime('Today'));
      )
    )
  )
)));

Şimdi, bu kod yazma beri, ben iş atamaları ile çok daha yapmaya karar verdi. Yani yeni bir model "Atama" yarattık ki belongsTo Kamyon ve İş belongsTo. Ben Kamyon modeli ve İş Modeli hem hasMany Atamaları ekledik. Ben diğer bazı atama alanları ile birlikte, atamaları tabloda hem yabancı tuşları var.

Şimdi, ben yerine sadece iş tablosundan atanan alanını kontrol, ben işi orada yok emin olmak için atamaları tablo kontrol etmek istiyorsanız, yukarıdaki aynı bilgi almak için çalışıyorum. Ben (yemek kitabı göre) nedeniyle mysql hataları bulmak yöntemin özelliği "katılır" kullanmak için gidiyorum ben artık containable davranışı kullanabilirsiniz. Farklı günlerde düşmek Ama bile, aşağıdaki sorgu, tüm işleri döndürür.

$this->set('resources', $this->Job->Company->find('first', array(
'joins' => array(
    array(
        'table' => 'employees',
        'alias' => 'Employee',
        'type' => 'LEFT',
        'conditions' => array(
            'Company.id = Employee.company_id'
        )
    ),
    array(
        'table' => 'trucks',
        'alias' => 'Truck',
        'type' => 'LEFT',
        'conditions' => array(
            'Company.id = Truck.company_id'
        )
    ),
    array(
        'table' => 'jobs',
        'alias' => 'Job',
        'type' => 'LEFT',
        'conditions' => array(
            'Company.id = Job.company_id'
        )
    ),
    array(
        'table' => 'assignments',
        'alias' => 'Assignment',
        'type' => 'LEFT',
        'conditions' => array(
            'Job.id = Assignment.job_id'
        )
    )
),
'conditions'    => array(
    'Job.pickup_date' => $day,
    'Company.id'    => $company_id,
    'Assignment.job_id IS NULL'
)
)));

EDIT: çıkıyor, benim sorgu çalışır, tüm atamaları iade edilmesi neden oldu benim veri ile bir sorun vardı.

1 Cevap

Sorgumda yanlış bir şey yoktur. Düzgün atamaları filtreleme beni engelleyen bir veri sorunu olduğu ortaya çıktı.