hasMany dernek ekleyerek iyi çalışmak değil () bulabilirsiniz neden olur

4 Cevap php

Tamam, ben kaybettim biraz duyuyorum ...

I am pretty new to PHP, and I am trying to use CakePHP for my web-site.
My DB is composed of two tables:

  • User_kimlik, isim sütunları ile kullanıcılar
  • copy_kimlik, copy_name, user_kimlik (kullanıcılara yabancı anahtar olarak) sütunları ile kopyalar.

ve uygun CakePHP elemanları vardır:

  • Bir model olarak kullanıcı ve Kopyalama
  • Kontrol olarak UserController
  • Ben sadece kumandadan json göndermek beri ben bir görünümü kullanmak yok.

Ben kullanıcı modeli ve modelden modele aşağıya bakın arasındaki ilişkiyi hasMany ekledik.

var $hasMany = array(
    'Copy' => array(
        'className' => 'Friendship',
        'foreignKey' => 'user_kimlik'
    )
); 

Dernek olmadan kullanıcıların masada her find () sorgu iyi çalışır, ancak modele hasMany ekledikten sonra, kullanıcılar aynı find () sorguları (print_r şey görünmüyor) durmasına ve her () sorgu bulabilirsiniz Ben Kopya model üzerinde uyguluyorum

$copy = $this->User->Copy->find('all', array(
    'condition' => array('Copy.user_kimlik' => '2')
));

koşul kısmını yok sayar ve sadece tüm veri tabanı dönmek.

Nasıl kod yürütülmesine hata? Ben eklediğinizde debug($var) hiçbir şey olmuyor.

4 Cevap

Ben bir uzman değilim, ama aşağıdaki ipuçları ile başlayabilirsiniz:

  1. CakePHP veritabanı adlandırma takip etmeye çalışın conventions. Sen zorunda değilsiniz, ama automagic olmasına izin çok daha kolay ... 'id' için tabel birincil anahtarları değiştirin, ör users.user_is -> users.id, copies.copy_id -> copies.id.
  2. Sadece hata ayıklama uğruna, bir görünüm tanımlayın. $this->set('users', $users); ile görmek ve bir <pre></pre> bloğu içinde bu görüntülemek için model ne olursa olsun bilgi geçmek
  3. Bu sizin ilk php ve / veya CakePHP girişimi ise, emin olun en azından blog öğretici yetinmek
  4. CakePHP (fırında) kullanıcıları ve kopya için model / view / kontrolörleri bir çalışma kümesi oluşturmak yapmak ve elde edilen kodunu inceleyelim
  5. Find hakkında iyi belgeler var: {[(0)}]

Ben asıl sorun bu olduğunu düşünüyorum:

'condition' => array('Copy.user_id' => '2')

Bu "durum" olmalıdır.

Ayrıca, adlandırma kurallarına sadık. Neyse ki Kek hemen hemen tüm varsayılır isimleri geçersiz sağlar, ama sadece bunlar varsayılan olarak beklemek ne yapmak daha kolay.

  • Birincil anahtarlar, tüm id adlı olmalıdır
  • Kontrolör pluralised alınmalıdır: UsersController

Öncelikle, CakePHP kuralını takip etmek mümkün olduğunca deneyin.

var $hasMany = array(
    'Copy' => array(
        'className' => 'Friendship',
        'fveyaeignKey' => 'user_id'
    )
);

Sizin dernek adı daha sonra classname, sen 'Dostluk' olan farklı bir tablo ve model 'Kopyala' dir.

Neden olmasın

var $hasMany = array(
     'Copy' => array('className'=>'Copy')
);

veya

var $hasMany = array(
     'Friendship' => array('className'=>'Friendship') 
);

veya

var $hasMany = array(
    'Copy' => array('className'=>'Copy'),
    'Friendship' => array('className'=>'Friendship')
);

Also, check typo errveyas like conditions instead of condition

Sizin tablo adı çok sorun olabilir. Ben "Sınıf" adlı bir tablo vardı ve bu pasta uyuyor verdi. Ben Sınıfım gibi bir şey için değişti ve o çalıştı. Sınıf ayrılmış bir kelime ve Copy çok biri olabilir.