gpt4 book ai didi

laravel - 我可以使用连接伪造 laravel 急切加载吗?

转载 作者:行者123 更新时间:2023-12-02 04:01:26 26 4
gpt4 key购买 nike

我已经阅读了几篇关于为什么预加载使用多个查询而不是加入 here 的帖子, here , 和 here .但是,我认为有必要使用连接而不是急切加载。我将如何构造查询,以便我可以访问子对象,就好像它是一个通常急切加载的对象一样?

示例:获取住在某条街道上的人,并同时加载该地址。我不想加载这个人的所有地址,以防他住在很多地方;只是匹配查询的地方。使用预加载和 whereHas 我必须复制查询,而且查询并不总是这么简单:

People::with(['address', function($query) use ($street_name){
return $query->where('street_name', $street_name);
}])->whereHas('address', function($query) use ($street_name){
return $query->where('street_name', $street_name);
})->get();

可能是

People::query()->join('address', function($join){
$join->on(...)
})->where('street_name', $street_name);

问题是我不能使用这个:

$person->address

有没有办法获取连接并对其进行处理(使用选择?),使其看起来像是急切加载的?

最佳答案

您可以执行以下操作:

People::join('addresses', 'addresses.people_id', '=', 'people.id')
->selectRaw('people.*')
->where('street_name', $street_name)
->with('addresses')
->get();

这使用了连接和预先加载。

仅通过连接,您可以访问以下内容:

$person->street_address

关于laravel - 我可以使用连接伪造 laravel 急切加载吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41771142/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com