我不确定如何做到这一点。我需要查询辅助表,以根据另一个表的id来提取类别的名称。全部动态。
我试过了hasmany
,hasone
,我无法解决任何问题。
我在这里得到了什么
我有两张桌子:
Advertisments id | adname | adsite_id
adsite_id == adsites.id
adsites
id | name
我正在尝试显示广告表,并将adsite_id替换为adsite.name的名称。
我无法弄清楚这一点。
AdvertismentController:
function index() {
$this->set('ads', $this->Advertisment->find('all'));
}
答案 0 :(得分: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'));
}
这应该有用。
答案 1 :(得分:0)
在您的方案中,Advertisement
属于Site
,Site
可以有多个Advertisement
条记录。根据CakePHP的惯例,您也没有命名您的列。如果Advertisement
属于Site
,则您的外键列应命名为site_id
。
回到手头的问题,您可以将Containable
行为添加到模型中,这样当您查询一个模型时,也会获取其相关数据。因此,如果您查询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);
}