雄辩的关系导致模型嵌套

时间:2016-03-14 12:08:17

标签: sql laravel eloquent

我使用以下关系定义了Eloquent BfsImages 模型:

public function listing()
{
    return $this->belongsTo('App\CommercialPeople\Models\BfsListings', 'bfs_listing_id', 'bfs_listing_id');
}

附加属性:

public function getPathAttribute()
{
    return config('settings.bfs_image_path') . $this->listing->auth_agent_id . '/' . $this->filename;
}

正如您所看到的,该属性引用了父模型,因此当我调用以下内容时:

BfsListings::with('images')->all();

即使从技术上讲,图像列表的关系也不会被调用,因为自定义属性中的引用BfsListing模型会附加到导致模型嵌套的图像中,所以我获取BfsListing-> BfsImages-> BfsListing。

我的问题是,有没有办法引用父模型而不实际附加它并返回它的数据?或者......也许有一种更好的方法可以将一个变量从父变量传递给子变量,以便可以在不再调用该变量的情况下使用它?

说实话,因为我的所有模型都是缓存的,所以我不太关心来回的多个查询,我只是想从图像模型中删除不必要的数据,但是我可以用一些聪明的方法来解决它不重复查询。

修改

可以在不使用这样的关系的情况下引用其他模型:

$this->listing()->setEagerLoads([])->first()->auth_agent_id;

然而,这仍然意味着对父模型的引用将进行一次,这再次导致两级嵌套(因此基本上问题没有解决,但在某些情况下,这将有助于避免无限循环)。

我仍然无法弄清楚如何调用父模型而不再实际加载它。

1 个答案:

答案 0 :(得分:0)

您可以为父级别名 - >子关系然后通过别名访问父级。

$a = $parent->child;
$b = $a->parent;