2

只是在一个项目中,我有一个名为“Product”的类和一个名为“Image”的类。每个产品都有两种类型的图像,一种“正面”图像和一种“背面”图像,因此我定义了两个字段,一个称为 image_front_id,一个称为 image_back_id。

在 BaseProduct::setUp() 方法中,我定义了正面图像的关系如下:

$this->hasOne( 'Image', array ('local' => 'image_front_id', 'foreign' => 'id' ) );

现在,显然,当我为“Image”类定义另一个“hasOne”时,但现在使用“image_back_id”的本地字段名,这不起作用。所以我的问题是:如何定义同一个类的多个“一对一”关系?我一直在寻找这个有一段时间了,但我似乎找不到它。

4

4 回答 4

2

正确答案是

$this->hasOne('Image as FrontImage', array('local' => 'image_front_id', 'foreign' => 'id'));
$this->hasOne('Image as BackImage', array('local' => 'image_back_id', 'foreign' => 'id'));
于 2009-12-13T05:05:04.380 回答
1

如果您尝试关联 2 个不同的表,则 Zed 的答案有效,但听起来您正试图将两个字段与同一个表关联。Arthur Frankel 的解决方案应该适合您。您不能有多个具有相同名称的关系,因此您必须使用别名来获得与同一个 Image 表的 2 个不同关系。通过声明“Image as FrontImage”和“Image as BackImage”,每个关系都有自己的别名。

于 2009-11-18T21:24:16.987 回答
0

如果我没记错的话,第一个参数是引用的名称,引用的类由 refClass 属性给出:

$this->hasOne('FrontImage', array('local' => 'image_front_id', 'foreign' => 'id', refClass => 'Image' ));
$this->hasOne('BackImage', array('local' => 'image_back_id', 'foreign' => 'id', refClass => 'Image' ));
于 2009-11-16T19:40:35.847 回答
0

我相信解决方案如下(使用'as'关键字):

$this->hasOne('Image as FrontImage', array('local' => 'image_front_id', 'foreign' => 'id', refClass => 'Image' ));
$this->hasOne('Image as BackImage', array('local' => 'image_back_id', 'foreign' => 'id', refClass => 'Image' ));
于 2009-11-16T19:46:16.397 回答