代码之家  ›  专栏  ›  技术社区  ›  Matius Nugroho Aryanto

Laravel匿名函数如何知道其参数

  •  0
  • Matius Nugroho Aryanto  · 技术社区  · 7 年前

    考虑以下代码:

    $fn = FormNilai::whereHas('mataPelajaranLokalGuru',function($mlg) {
          $mlg->where('guru_id','=',$this->uid);
    })->get();
    

    怎么样 $mlg FormNilai 例子情况如何?我读了很多关于依赖注入的书,但仍然没有抓住要点。

    3 回复  |  直到 7 年前
        1
  •  1
  •   AddWeb Solution Pvt Ltd    7 年前

    Dependency Injection 是一个不同的部分。根据您的代码示例,您需要告诉匿名函数使用该变量,如。。。

    $uid = $this->uid; 
    $fn = FormNilai::whereHas('mataPelajaranLokalGuru',function($mlg) use($uid)
                        {
                            $mlg->where('guru_id','=',$uid);
                        })->get();
    

    uid 不在匿名函数的范围内,需要使用上面代码中所示的use关键字将其传入。

    你可以了解更多 use 举个例子 here

        2
  •  0
  •   Community Lee Campbell    4 年前

    参数 $mlg 不被视为 FormNilai Illuminate\Database\Eloquent\Builder .

    你可以在源代码中看到它是如何工作的。 Illuminate/Database/Eloquent/Builder.php#L934

    定义接受正则参数的匿名函数:

    $example = function ($arg) {
        var_dump($arg);
    };
    
    $example("hello");
    

    您可以将参数名称更改为任何字符串,就像 $myArgument
    无论参数名称是什么,输出都不会更改。

        3
  •  0
  •   mohamed gaber    7 年前

    为了便于使用,它们显示如下示例

    $users = User::with(array('posts' => function($query)
    {
    $query->where('title', 'like', '%first%');
    }))->get();
    

    如果用户想让第三个参数充满变量,该怎么办。当我用任何全局变量替换那些''%first%'字来检查它时,它破坏了结构,我就这样做了。

    $title = 'heirlom of marineford';
    $users = User::with(array('posts' => function($query)
    {
       $query->where('title', 'like', $title);
    }))->get();
    

    搜索PHP文档后,我发现通过使用use()扩展函数块将参数传递给该匿名函数的技术,因此该函数将假设使用use()部分定义的所有变量

    $title = 'heirlom of marineford';
    $users = User::with(array('posts' => function($query) use($title)
    {
        $query->where('title', 'like', $title);
    }))->get();