Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 拉威尔:有没有更聪明的方法只返回用户记录而不是在每个查询中过滤它们_Php_Laravel_Eloquent - Fatal编程技术网

Php 拉威尔:有没有更聪明的方法只返回用户记录而不是在每个查询中过滤它们

Php 拉威尔:有没有更聪明的方法只返回用户记录而不是在每个查询中过滤它们,php,laravel,eloquent,Php,Laravel,Eloquent,在我的Laravel应用程序中,我有以下型号: 用户、业务、配置文件、订阅。 一个用户将有一个业务,一个业务将有一个配置文件和多个订阅 在我的Subscription controller中,许多用于下拉已登录用户订阅的方法要求我添加以下内容: Subscription::where('business_id', '=', Auth::user()->business->id)->active()->get(); 在一个查询中,这可能不是问题,但我有许多方法可以提取业务

在我的Laravel应用程序中,我有以下型号:
用户、业务、配置文件、订阅。
一个用户将有一个业务,一个业务将有一个配置文件和多个订阅

在我的Subscription controller中,许多用于下拉已登录用户订阅的方法要求我添加以下内容:

Subscription::where('business_id', '=', Auth::user()->business->id)->active()->get();

在一个查询中,这可能不是问题,但我有许多方法可以提取业务订阅记录,我想知道是否有一种更智能的方法可以只获取业务记录,同时还可以为查询添加其他作用域。

假设订阅和业务之间存在Laravel关系,您可以这样重写此查询:

$subs = Auth::user()->business->subscriptions()->active()->get();

->subscriptions()
部分将返回一个查询,您可以在其上链接其他作用域。

如果您的关系设置正确,则可以执行以下操作之一

$subscriptions = auth()->user()->business()->subscriptions()->active()->get();

$subscriptions = Subscription::whereHas('business', function ($query) {
    $query->where('user_id', auth()->id());
})->active()->get();

既然用户只有一个业务,为什么要将订阅与业务id关联?这是为了允许将来将一个业务分配给多个用户是的,我理解这一点。尽管如此,这取决于您的用例和工作流的其余部分。尝试使用关系,而不是进行此类查询。另一个可能的暗示。如果您希望将来有更多的用户属于某个企业。围绕“业务”启动/创建逻辑。例如,“一个企业有一个/多个用户”、“用户有一个订阅”、“用户属于一个企业”您应该使用
business()
而不是
business
,因为您不需要这里的业务对象。我很确定这不会起作用,因为
business()
会返回查询对象,而不是模型。查询对象没有关系,模型有关系。事实上,您需要知道业务的
id
,才能获得相关订阅。另外,通过使用
->business
,如果您碰巧在更早的地方加载了
business
,则无需再次查询它。