我使用Laravel,我需要将一个关联数组传递给一个雄辩的模型中的静态函数。
class MyClass extends Eloquent\Model
{
static function scopeRegister($input) {
return $input['key1'];
}
}
使用Tinker运行,这是我的输入:
$input = array('key1'=>'value', 'key2'=>'value', 'key3'=> 'value', 'key4'=>'value');
但是,当我尝试它时,我收到了错误:
PHP错误:无法使用Illuminate \ Database \ Eloquent \ Builder类型的对象作为数组
当我输入提示数组:
class MyClass extends Eloquent\Model
{
static function scopeRegister(array $input) {
return $input['key1'];
}
}
我收到以下错误:
传递给App \ KeywordGeotarget :: scopeRegister()的参数1必须是类型数组,给定对象
这里发生了什么以及如何从模型中的静态方法访问数组中定义的值?
编辑:我现在只是使用修补程序来测试这个,但这是我用来调用方法的代码:
php artisan tinker
>> $input = array('key1'=>'value','key2'=>'value','key3'=>'value', 'key4'=>'value');
>> App\MyClass::register($input);
答案 0 :(得分:1)
由于它是作用域,因此您需要添加$query
作为第一个参数,然后执行以下操作:
static function scopeRegister($query, array $input)
{
return $query->where($input['key1']);
}
如果您只想拥有一个方法并且不想将其用作本地范围,只需重命名该方法(删除scope
部分):
static function register(array $input)
答案 1 :(得分:1)
您对添加查询范围的理解是错误的我想您需要查看我认为的文档。 Check it over here. 范围表示查询构建器属性,您无法将构建器类属性作为数组获取。你应该这样使用它。
class MyClass extends Eloquent\Model
{
public function scopeRegister($query) {
return $query->where(// perform your where here);
}
}
答案 2 :(得分:1)
您正在定义一个雄辩的范围。范围不适用于数组,但适用于查询。
您可以在此处详细了解如何声明和使用范围https://laravel.com/docs/5.5/eloquent#local-scopes
如果您想像修补程序示例中那样调用register()
,请执行此操作(只需删除范围):
class MyClass extends Eloquent\Model
{
static function register(array $input) {
return $input['key1'];
}
}