【问题标题】:Eloquent relationship causes model nestingEloquent 关系导致模型嵌套
【发布时间】:2016-06-29 11:14:18
【问题描述】:

我定义了具有以下关系的 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();

尽管从技术上讲 from 图像 to 列表的关系没有被调用,因为自定义属性 BfsListing 模型中的引用被附加到导致模型嵌套的图像中,所以我获取 BfsListing->BfsImages->BfsListing.

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

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

编辑

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

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

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

如果不重新加载父模型,我仍然无法弄清楚如何调用它。

【问题讨论】:

    标签: sql laravel eloquent


    【解决方案1】:

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

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

    【讨论】:

    • 那究竟是如何工作的?我通过以下方式加载模型:$bfs = BfsListings::with('images')->find($id); $bfs->setAppends(['listed_date']); return $bfs;
    猜你喜欢
    • 1970-01-01
    • 2021-05-03
    • 1970-01-01
    • 1970-01-01
    • 2019-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-20
    相关资源
    最近更新 更多