有没有办法根据自定义外键创建一个Eloquent关系函数 - 其他键值?
例如我有等级关系:
public function level(){
return $this->belongsTo(Level::class, 'level_number', 'number');
}
我想做这样的事情:
public function nextLevel(){
return $this->belongsTo(Level::class)->where('number', '=', $this->level_number + 1);
}
这是可能的还是我必须写一个原始查询?
答案 0 :(得分:0)
我也遇到类似的情况,所以我对Laravel基本代码进行了一些研究,发现了一个非常干净的解决方案。
BelongsTo class中的Laravel(5.8)最终使用了类似的东西:
$this->query->where($table.'.'.$this->ownerKey, '=', $this->child->{$this->foreignKey});
$this->child
是一个包含Eloquent对象的变量,因此我们可以使用Eloquent getters的魔力。
解决方案是使用任何名称创建getter并将其用作第二个参数,作为关系声明中的外键:
public function level()
{
return $this->belongsTo(Level::class);
}
public function nextLevel()
{
return $this->belongsTo(Level::class, 'next_level_id');
}
public function getNextLevelIdAttribute()
{
// any logic to get id (static value, db query etc..)
return $this->id + 1;
}