-2

我不确定如何做到这一点。我需要查询一个辅助表以根据另一个表的 id 提取类别的名称。都是动态的。

我试过了hasmanyhasone我什么也做不了。这是我得到的

我有 2 张桌子:

Advertisments id | adname | adsite_id    
adsite_id == adsites.id

adsites
id | name

我正在尝试显示广告表并将 adsite_id 替换为 adsite.name 的名称。

我无法弄清楚这一点。

广告控制器:

function index() { $this->set('ads', $this->Advertisment->find('all')); }

4

2 回答 2

0

在您的场景中, anAdvertisement属于 a Site,并且 aSite可以有很多Advertisement记录。您也没有按照 CakePHP 的约定命名列。如果一个Advertisement属于一个Site,那么你的外键列应该被命名site_id

回到手头的问题,您可以将Containable行为添加到模型中,这样当您查询一个模型时,它的相关数据也会被获取。因此,如果您查询 an Advertisement,它也会获取相应的Site记录。您的模型将如下所示:

<?php
class Advertisement extends AppModel {

    public $name = 'Advertisement';
    public $actsAs = array('Containable');
    public $belongsTo = array('Site');
}

你的Site模型:

<?php
class Site extends AppModel {
    public $name = 'Site';
    public $actsAs = array('Containable');
    public $hasMany = array('Advertisement');
}

然后,您可以像这样查询当前站点中的广告:

public function index() {
    $advertisements = $this->Advertisement->find('all');

    $this->set('advertisements', $advertisements);
}
于 2013-11-03T23:58:47.927 回答
0

$belongsTo在这种情况下,您应该使用。

模型 : Advertisments.php

class Advertisment extends AppModel {
    public $belongsTo = array(
        'Adsite' => array(
            'className' => 'Adsite',
            'foreignKey' => 'adsite_id'
        )
    );
}

模型 : Adsites.php

class Adsite extends AppModel {
    public $hasOne = 'Advertisment';
}

控制器AdvertismentsController.php

function index() { 
     $this->set('ads', $this->Advertisment->Adsite->find('all')); 
}

这应该有效。

于 2013-11-03T23:43:50.943 回答