与海外定制的雄辩关系 - 其他关键价值

时间:2015-10-31 22:01:48

标签: php laravel eloquent laravel-5.1

有没有办法根据自定义外键创建一个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);
}

这是可能的还是我必须写一个原始查询?

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;
}