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) 第二个是laravelmagic...第一个是不错的 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的主要内容,如果未能解决你的问题,请参考以下文章

PHP:$_SESSION 变量未传递到下一个网页

PHP 命名空间 - 父类变量未正确传递给子类

将全局变量传递给ajax函数,发布到php,保存到数据库

如何将PHP变量从一个函数传递到另一个函数?

将变量从 PHP 传递到 AJAX 成功函数

会话变量未在实时服务器中传递[关闭]