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