Saya ingin menyetel kunci asing yang digunakan saat menggunakan asosiasi milikToMany-through di CakePHP 3.0.
Perhatikan dua tabel berikut:
entitas: id, judul
tautan: id, dari_id, ke_id, informasi_tambahan
Saya menggunakan asosiasi milikToMany-through karena informasi tambahan yang perlu saya simpan di tabel tembus.
Berikut adalah dua kelas Tabel:
class LinksTable extends AppTable
{
public function initialize(array $config) {
parent::initialize($config);
$this->belongsTo('FromEntities', [
'className' => 'Entity',
'foreignKey' => 'from_id'
]);
$this->belongsTo('ToEntities', [
'className' => 'Entity',
'foreignKey' => 'to_id'
]);
}
}
class EntitiesTable extends AppTable
{
public function initialize(array $config) {
parent::initialize($config);
$this->belongsToMany('Entities', [
'through' => 'Links'
]);
}
}
Namun tentu saja CakePHP mencoba menggabungkan tabel menggunakan kunci asing default entity_id
, dan ini tidak benar.
Bagaimana cara menentukan kunci asing yang digunakan untuk menggabungkan tabel di kelas EntitiesTable?
Edit: Demi kelengkapan, berikut adalah pesan kesalahan dan kueri yang dihasilkan saat mencoba mengambil Entitas yang diasosiasikan menggunakan $this->Entities->findById(1)->contain('Entities');
.
Kesalahan: SQLSTATE[42S22]: Kolom tidak ditemukan: 1054 Kolom tidak dikenal 'Links.entity_id' di 'daftar bidang'
SELECT Links.entity_id AS `Links__entity_id`, Links.id AS `Links__id`, Links.from_id AS `Links__from_id`, Links.to_id AS `Links__to_id`, Links.type AS `Links__type`, Links.role AS `Links__role`, Entities.id AS `Entities__id`, Entities.type AS `Entities__type`, Entities.title AS `Entities__title`, Entities.user_id AS `Entities__user_id`, Entities.created AS `Entities__created` FROM entities Entities INNER JOIN links Links ON Entities.id = (Links.entity_id) WHERE Links.entity_id in (:c0)
Ada beberapa kolom tambahan dalam kueri yang dihasilkan yang saya hapus dari contoh kode di atas, jika Anda bertanya-tanya.