【问题标题】:Eloquent relation with custom foreign - other key value与自定义外键的 Eloquent 关系 - 其他键值
【发布时间】:2015-10-31 22:01:48
【问题描述】:

有没有办法根据自定义外键值创建 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 个或多个结果吗?
  • 然后添加return $this->hasOne(level::class);' then in your controller via a closure on your relationship $var = Level::with('nextLevel,function($q){ $q->where('level_number', '=', $current_level_num+1); })->first();`
  • 那么当你经营你当前的关系时会发生什么?
  • 它不起作用。这只是我想做的一个例子。

标签: php laravel eloquent laravel-5.1


【解决方案1】:

我也遇到过类似的情况,所以我在 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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-20
    • 1970-01-01
    • 2020-11-27
    • 2021-12-12
    • 2019-10-31
    • 1970-01-01
    • 2021-04-09
    • 2021-04-04
    相关资源
    最近更新 更多