考虑以下代码:
$fn = FormNilai::whereHas('mataPelajaranLokalGuru',function($mlg) {
$mlg->where('guru_id','=',$this->uid);
})->get();
$mlg
如何始终被视为FormNilai
个实例?情景怎么样?我读了很多关于依赖注入的内容,但仍然没有说明问题。
答案 0 :(得分:1)
我已经意识到laravel支持php匿名风格,所以我们可以实现这样的javascript函数用法,但我第一次肯定很难做到
为简单起见,他们会显示一个这样的例子
$users = User::with(array('posts' => function($query)
{
$query->where('title', 'like', '%first%');
}))->get();
如果用户想要使第三个参数填充变量,该怎么办?当我检查出来并替换那些'%'%%'任何全局变量的单词,都会破坏结构,并且它会发生在我身上。
$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();
我希望这可以帮到你
答案 1 :(得分:0)
Dependency Injection是另一个角色。根据您的代码示例,您需要告诉匿名函数使用该变量,如...
$uid = $this->uid;
$fn = FormNilai::whereHas('mataPelajaranLokalGuru',function($mlg) use($uid)
{
$mlg->where('guru_id','=',$uid);
})->get();
由于变量uid
超出了匿名函数的范围,因此需要使用use关键字传递,如上面的代码所示。
您可以使用示例here
在use
上获得更多想法
答案 2 :(得分:0)
参数$mlg
未被视为FormNilai
个实例,它只被视为Illuminate\Database\Eloquent\Builder
的实例。
您可以在源代码中看到它的工作原理。 Illuminate/Database/Eloquent/Builder.php#L934
定义匿名函数接受常规参数:
$example = function ($arg) {
var_dump($arg);
};
$example("hello");
您可以将参数名称更改为任何字符串,就像$myArgument
一样
并且无论参数名称是什么,输出都不会改变。