部分匹配的雄辩关系

时间:2015-04-28 14:58:39

标签: php laravel laravel-5

我是否可以有一个雄辩的关系,只有部分匹配的连接?

解释一下,这是一个模型;

class PostcodeCoord extends Model {
  public function payment()
  {
    return $this->hasMany('App\Models\Payment', 'Vendor ZIP', 'postcode');
  }
}

我的另一个模特;

class Payment extends Model {
  public function postcodeCoord()
  {
    return $this->belongsTo('App\Models\PostcodeCoord', 'postcode', 'postcode');
  }
}

我的payments表格中有一个名为Vendor ZIP的列。我的postcode_coords表格中有一个名为postcode的列。

问题在于,postcode列只有3或4个字符长(英国邮政编码例如SW1A的第一部分)。然而,Vendor ZIP,是完整的6或7个字符。例如SW1A2AA。

1 个答案:

答案 0 :(得分:0)

AFAIK,无法在ID字段之间的部分匹配上创建关系。也就是说,我可以想出两种不同的解决方法:

  1. 在您的payments表格中添加一个名为postalcodegroup的新列。创建或更新模型时,请确保使用邮政编码的第一部分填写此列。最好的方法是通过model events。然后,您可以在payments.postcodegrouppostcode_coords.postcode

  2. 之间建立关系
  3. 在付款模型上写一个accessor,该模型将执行数据库查询,以便在调用时从postcode_coords表中检索相关数据。

  4. 在这两个中,选项1可能更好(更干净),尽管它确实需要在表中添加列。