如何使hasOne关系引用模型上的属性而不是主键?

时间:2013-09-25 23:04:50

标签: model laravel laravel-4 relationship eloquent

在定义关系时,如何使用除id之外的模型属性来告诉hasOne模型?

我的课程是:

Site
  id
  zipcode

LocationData
  id
  zipcode

当我跑步时:

$site = Site::find(1);
$site->locationData

生成的查询是:

select * from `location_data` where `location_data`.`zipcode` = 1 limit 1

请注意,引用的zipcode列传递1(站点ID),但我希望它使用站点的zipcode代替。

注意:我不是问如何在子关系上设置外键,而是如何将该外键传递给父主键以外的属性。

2 个答案:

答案 0 :(得分:1)

知道了。这是一个调整:

编辑模型并将primaryKey移至公开可见性:

class Site extends Eloquent {

    public $primaryKey = 'id';

    ....
}

然后你只需要在需要时设置它:

$site = Site::find(1);
$site->primaryKey = 'zipcode';
$site->locationData;

答案 1 :(得分:0)

您可以在定义关系时声明关系键。

return $this->hasMany('Thing','key_to_use');