Php 变量未传递到 whereHas 函数 - Laravel Eloquent
Posted
技术标签:
【中文标题】Php 变量未传递到 whereHas 函数 - Laravel Eloquent【英文标题】:Php Variable not passing into whereHas function - Laravel Eloquent 【发布时间】:2018-07-15 18:36:19 【问题描述】:总结:我无法访问 whereHas 函数中的 $domain 变量(如下); Laravel 返回以下错误:
“未定义变量:域”
我将我的关系包括在内,因为我不确定 eloquent 的性质以及我尝试调用此查询的方式是否会导致问题。
我有一个调用模型(组织)的中间件
组织模型有字段
子域
组织模型有
public function domains()
return $this->hasMany('App\Domain');
域模型(表名域)有字段
域,org_id
还有功能
public function org()
return $this->belongsTo('App\Org');
我可以在这个函数之前dd($domain);
没有问题。但是,我得到了一个
“未定义变量:域”
用于下面 whereHas 函数中的查询参数。
为什么 laravel 看不到上面设置的变量?
namespace App\Http\Middleware;
use Closure;
class DomainLookup
protected $org;
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
$route = $request->route();
$domain = $route->parameter('domain');
$trimmed_domain = trim($domain, (config('app.domain')));
$this->org = \App\Org::where('subdomain',$trimmed_domain)
->whereHas('domains', function($q)
$q->where('domain', $domain);
)
->get();
if ($this->org)
return $next($request);
【问题讨论】:
用function($q,$domain)
替换function($q)
@Hackerman ...我还在学习 php,这是 php 的行为,还是 laravel 的魔法?回复:function($q, $domain)
.. 与 .. function($q) use ($domain)
第二个是laravel
magic...第一个是不错的 php。
【参考方案1】:
函数后需要调用use
:
$this->org = \App\Org::where('subdomain',$trimmed_domain)
->whereHas('domains', function($q) use ($domain)
$q->where('domain', $domain);
)
->get();
【讨论】:
【参考方案2】:您应该使用use
将$domain
传递给您的闭包:
->whereHas('domains', function($q) use ($domain)
...
);
【讨论】:
以上是关于Php 变量未传递到 whereHas 函数 - Laravel Eloquent的主要内容,如果未能解决你的问题,请参考以下文章