在 cakephp 中从控制器加载关联时出错

Error loading association from controller in cakephp

我无法正确回答这个简单的查询。我需要加入我的 adresses table 到我的 annonces table.

我想这应该是非常困难的,但我就是无法让它工作。

我首先制作了我的 adresse table 对象

class AdressesTable extends Table
{
    public function initialize(array $config)
    {                                   
        $this->belongsTo('Annonces', [
                                    'foreignKey' => 'annonceId',
                                    'joinType' => 'INNER',
                                ]);
    }
}

然后在我的 annonces 控制器中,我尝试加入这样的地址

public function view($id = null)
{
    if (!$id) {
        throw new NotFoundException(__('Annonce invalide!'));
    }
    $query = $this->Annonces->find('all', ['contain' => ['Adresses']])->where(['id' => $id]);
    $annonce = $query->firstOrFail();
    $this->set(compact('annonce'));
}

但后来我得到了这个错误:

Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'Adresses.annonce_id' in 'where clause'

我不明白为什么我得到它,因为我在 AdressesTable class.

中定义了我的外键

我希望最后的查询如下所示

SELECT * 
FROM annonces
INNER JOIN adresses ON adresses.annonceId = annonces.id
WHERE annonces.id = @param 

*PS。我知道它不会是 select * 而是 select [我的所有专栏]*

编辑:我的 table 架构如下

CREATE TABLE annonces(
    id INT NOT NULL AUTO_INCREMENT,     #PK
    startDate DATE NOT NULL,
    endDate DATE NOT NULL,
    title VARCHAR(128) NOT NULL,
    descript TEXT NOT NULL,
    infoSupplementaire TEXT NULL,
    premium BIT NOT NULL,
    clientId INT NOT NULL,              #FK
    categorieId INT NOT NULL,           #FK

    CONSTRAINT pk_annonces_id PRIMARY KEY (id),
    CONSTRAINT fk_annonces_clientId FOREIGN KEY (clientId) REFERENCES clients(id),
    CONSTRAINT fk_annonces_categorieId FOREIGN KEY (categorieId) REFERENCES categories(id)
);

CREATE TABLE adresses(
    id INT NOT NULL AUTO_INCREMENT,     #PK
    latitude DECIMAL(11,7),
    longitude DECIMAL(11,7),
    adresse VARCHAR(512),
    annonceId INT NOT NULL,             #FK

    CONSTRAINT pk_adresses_id PRIMARY KEY (id),
    CONSTRAINT fk_adresses_annonceId FOREIGN KEY (annonceId) REFERENCES annonces(id)
)

我按照 cakephp 约定重命名我的专栏并使用

中的任何代码解决了我的问题

你可以试试

$query = $this->Annonces->find('all', ['contain' => ['Adresses']])->where(['Annonces.id' => $id]);
$annonce = $query->firstOrFail();

public function view($id = null)
{
    if (!$id) {
        throw new NotFoundException(__('Annonce invalide!'));
    }
    $annonceEntity = $this->Annonces->get($id);

    $query = $this->Annonces->find('all', ['contain' => ['Adresses']])->where(['Annonces.id' => $annonceEntity->id]);
    $annonce = $query->firstOrFail();
    $this->set(compact('annonce'));
}