首页 > 解决方案 > 加入本地范围

问题描述

我在我的模型上做一个本地范围。在我的范围内,我加入了表格,但是在我的结果集上,我失去了对我的关系的引用。

在 Entry 模型中,我有这种关系:

  public function items() {
    return $this->hasMany('App\Models\Accounting\EntryItem', 'entry_id');
}

这个范围:

public function scopeWithConst($query, $const_code) {
    return $query->join('consts', function($join) use($const_code) {
                $join->on('consts.code', '=', $const_code);
            });
}

在控制器中:

 $entry = Entry::with('items')->withConst('entries.status')->find($id);

由于调用了“withConst”范围,它总是返回“items”:[]!

有什么解释吗?

标签: laraveljoinscope

解决方案


您必须将“entries.status”替换为您要查找的条目中此特定 $id 的“entries.status”的值。你可以通过闭包或在调用'withConst'之前找到值来做到这一点。

$status = Entry::find($id)->pluck('status');
$entry = Entry::with('items')->withConst($status)->find($id);

或者

$entry = Entry::with('items')->withConst(function() use ($id) {
    return Entry::find($id)->pluck('status');
    }
  )->find($id);

据我所知,范围是可重用的限制,不适用于涉及 2 个表的连接。根据您对示波器的需求量,以没有示波器的传统方式保存它。


推荐阅读