Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

CakePHP 1.3 - Kolom tidak diketahui di mana klausa

Anda harus sangat berhati-hati dengan hubungan yang Anda kejar. Dari sekilas beberapa jawaban ini, mereka tampaknya menyarankan Anda untuk menambahkan gabungan ke model Email ke dalam model Person Anda dan mengandalkan kondisi temuan Anda untuk memastikan kueri Anda tidak merusak memori server Anda.

Saya akan berasumsi bahwa pertama-tama, Anda ingin hubungan Email ini menjadi implisit dalam semua kueri Anda di Person, jika tidak, Anda cukup menentukan gabung pada setiap kueri yang Anda inginkan. Dalam hal ini, Anda pasti ingin menautkannya menggunakan hubungan model .

Kode Anda menunjukkan bahwa Shooting dan ShootingPlacement (anggap ini adalah model ke model hubungan pemetaan) keduanya milik dua model. Kebetulan, Menembak belongsTo Emisi - yang belum kita lihat di sini. Saya berasumsi ini tidak berlaku untuk skenario saat ini.

Sekarang, mari kita asumsikan bahwa karena tabel Email Anda memiliki kunci asing , itu akan menjadi hasOne hubungan, daripada hasMany - jadi itulah yang Anda butuhkan untuk menautkannya. Saya akan menautkannya ke model ShootingPlacement karena ini adalah model yang Anda tanyakan, jadi ini harus menjadi titik pusat di mana model digabungkan di sekitarnya. Dari segi struktur, karena semuanya tampaknya berasal dari model Person Anda, saya harus menyarankan Anda menanyakan itu model sebagai gantinya. Namun cara penyiapannya sejauh ini memungkinkan Anda untuk melakukan kueri dari hampir di mana saja dan masih mengambil sebagian besar bilah hasil yang sama beberapa nama model dan alias tabel.

Murni karena kunci asing Anda antara Email dan ShootingPlacement memiliki nama yang berbeda, dan CakePHP 1.3 tidak menangani ini dengan baik, saya juga akan menyarankan Anda untuk tidak menggunakan kunci asing, alih-alih memasukkannya ke dalam hubungan sebagai kondisi .

class ShootingPlacement extends AppModel
{
    var $name = 'ShootingPlacement';
    var $actsAs = array('Containable');

    var $hasOne = array(
        'Email' => array(
            'className' => 'Email',
            'foreignKey' => false,
            'conditions' => array(
                'Email.shooting_placement_id = ShootingPlacement.id',
                'Email.person_id = ShootingPlacement.person_id'
            )
        )
    );

    var $belongsTo = array (
        'Person' => array (
            'className' => 'Person',
            'foreignKey' => 'person_id',
            'order' => 'lastname ASC'
        ),
        'Shooting' => array (
            'className' => 'Shooting',
            'foreignKey' => 'shooting_id'
        )
    );
}

Saya juga menambahkan perilaku yang dapat ditahan di sana. Ini memungkinkan Anda untuk mengontrol dari setiap kueri model terkait mana yang ingin Anda kembalikan dengan hasil model utama Anda. Ini akan menjadi default untuk semua, tetapi dapat berguna ketika Anda hanya menginginkan sesuatu yang spesifik dan/atau karena alasan memori (kueri semacam ini dapat menghancurkan memori server Anda dengan cukup cepat jika Anda tidak membatasinya atau hanya menentukan nama bidang yang Anda inginkan kembali).

Sekarang ketika Anda membuat model Email Anda, saya tidak menyarankan untuk memperumit kekacauan model terjerat ini lebih jauh dengan menautkannya kembali ke ShootingPlacement lagi. Seperti yang Anda katakan, itu juga memiliki kunci asing untuk model Person. Jadi Anda mungkin ingin melakukan hal yang persis sama seperti di atas untuk model Person Anda (tentu saja mengubah kondisi untuk mencerminkan kunci asing Person). Dengan cara ini model Anda sedikit lebih fleksibel; itu akan tetap bergabung dengan ShootingPlacement dan Person, dan juga akan memungkinkan Anda untuk menanyakannya secara terpisah jika diperlukan tanpa model terkait lainnya.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mulai Melihat Hasil Kueri Sebelum Kueri Berakhir

  2. bagaimana cara menampilkan tabel klasemen dengan cepat dari tabel mysql hasil sepak bola [sepak bola]?

  3. Menginstal dan Bekerja dengan MySQL 5 di Windows 7

  4. Hibernate, JDBC dan kinerja Java pada set hasil menengah dan besar

  5. java.sql.SQLException:Setelah hasil akhir ditetapkan di mysql