与国外客户的长期关系-其他关键价值


Eloquent relation with custom foreign - other key value

有没有一种方法可以基于自定义外键-其他键值创建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);
}

这可能吗?或者我必须写一个原始查询?

我也遇到过类似的情况,所以我对Laravel基本代码进行了一些研究,发现了一个非常好的、干净的解决方案。

BelongsTo类中的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;
}