我在使用 Yii 框架时遇到了一个小问题。
为了解释这种情况:
我必须创建一个销售促销滑块。每个促销活动都包含一个指向有关促销活动的更多信息的url和一个图像 url。每个促销都有其图像的多个本地化版本。为此,我创建了 2 个数据库表 -
首先是 Promotions 表:
CREATE TABLE IF NOT EXISTS `promotions` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`title` varchar(100) NOT NULL,
`image` int(10) unsigned DEFAULT NULL,
`destination` varchar(200) NOT NULL,
`status` tinyint(3) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `image` (`image`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;
第二个是促销图片表:
CREATE TABLE IF NOT EXISTS `promoImages` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`pid` int(10) unsigned NOT NULL,
`language` varchar(2) NOT NULL,
`url` varchar(200) NOT NULL,
PRIMARY KEY (`id`),
KEY `language` (`language`),
KEY `mhm` (`pid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=10 ;
这种数据库结构的想法是,在字段图像的每个促销表行中,它包含适当图像的标识符,然后在表promoImages中,相关列pid包含唯一的促销标识符。每个促销都可以用几种未定义的语言进行本地化,因此对于与单个促销相关的每个图像,promoImages中可以有几行,例如:
INSERT INTO `promoImages` (`id`, `pid`, `language`, `url`) VALUES
(1, 1, 'lv', '/path/to/image1_lv.png'),
(2, 2, 'lv', '/path/to/image2_lv.png'),
(3, 3, 'lv', '/path/to/image3_lv.png'),
(4, 1, 'en', '/path/to/image1_en.png'),
(5, 2, 'en', '/path/to/image2_en.png'),
(6, 3, 'en', '/path/to/image3_en.png'),
(7, 1, 'ru', '/path/to/image1_ru.png'),
(8, 2, 'ru', '/path/to/image2_ru.png'),
(9, 3, 'ru', '/path/to/image3_ru.png');
现在考虑到这种结构,我还在表格促销中创建了一个外键,它与 Yii 框架“Gii”工具一起生成了具有这种关系的模型:
表格促销模型关系
'promoImages' => array(self::HAS_MANY, 'PromoImages', 'pid'),
和 table promoImages模型关系
'p' => array(self::BELONGS_TO, 'Promotions', 'pid'),
据我所知,关系是正确的,单个促销可以有多个promoImages表行,并且任何promoImages行只能属于单个促销,因为我正确地相信这是真的?
我希望我已经尽可能彻底地解释了情况,现在谈谈问题本身。
正如我在顶部提到的那样,我真的只需要从每个表中检索 2 个值,1 个:来自promotions的destination和来自promoImages的url ,但是当我选择这些值时,我需要记住只选择那些状态为为“1”,表示促销活动。此外,在选择促销图片时,我需要从promoImages表中选择对应于促销图片列以及当前选择的应用程序语言(Yii::app()->language)的行。
到目前为止,我的代码如下:
促销小部件控制器
public function run() {
$l = Yii::app()->language;
$promos = Promotions::model()->with('promoImages')->findAll('status=:status AND promoImages.language=:language', array(
':status' => 1,
':language' => $l
));
$this->render('promo', array('promotions' => $promos));
}
促销小部件视图
foreach ($promotions as $promotion) {
// $image = $promotion->promoImages->url;
$dest = $promotion->destination;
echo "<div class='promo_hold'>";
echo "<a href='$dest'><img src='$image'></a>";
echo "</div>";
}
这为我提供了 3 个活动促销所需的 3 个 div,但图像为空,如果我取消注释 $image 定义,我会得到Trying to get property of non-object错误,这基本上是我被卡住的地方,我已经查看了 Yii 的课程参考,但到目前为止它还没有给我任何帮助。
如果我缺少任何必需的信息,请随时询问。
预先感谢!
PS我希望我的文字墙实际上不会吓跑可能有答案的人:O