将数组传递给 Eloquent 模型的静态方法
Pass an Array to Static Method of Eloquent Model
我正在使用 Laravel,我需要将关联数组传递给 eloquent 模型中的静态函数。
class MyClass extends Eloquent\Model
{
static function scopeRegister($input) {
return $input['key1'];
}
}
运行 修补匠,这是我的意见:
$input = array('key1'=>'value', 'key2'=>'value', 'key3'=> 'value', 'key4'=>'value');
不过,当我尝试时,出现错误:
PHP error: Cannot use object of type Illuminate\Database\Eloquent\Builder as array
当我键入提示数组时:
class MyClass extends Eloquent\Model
{
static function scopeRegister(array $input) {
return $input['key1'];
}
}
我收到以下错误:
Argument 1 passed to App\KeywordGeotarget::scopeRegister() must be of the type array, object given
这里发生了什么,我如何从模型中的静态方法访问数组中定义的值?
编辑:我现在只是使用 tinker 来测试它,但这是我用来调用该方法的代码:
php artisan tinker
>> $input = array('key1'=>'value','key2'=>'value','key3'=>'value', 'key4'=>'value');
>> App\MyClass::register($input);
因为它是一个作用域,你需要添加一个$query
作为第一个参数,然后做这样的事情:
static function scopeRegister($query, array $input)
{
return $query->where($input['key1']);
}
如果你只想拥有一个方法而不想将它用作本地范围,只需重命名该方法(删除 scope
部分):
static function register(array $input)
您对添加查询范围的理解是错误的,我想您需要阅读我认为的文档。 Check it over here.
范围表示查询构建器属性,您无法将构建器 class 属性作为数组获取。你应该这样使用它。
class MyClass extends Eloquent\Model
{
public function scopeRegister($query) {
return $query->where(// perform your where here);
}
}
您正在定义一个 eloquent 范围。作用域不适用于数组,但适用于查询。
您可以在此处阅读有关如何声明和使用范围的更多信息https://laravel.com/docs/5.5/eloquent#local-scopes
如果您想像在 tinker 示例中那样调用 register()
,请改为执行此操作(只需删除作用域):
class MyClass extends Eloquent\Model
{
static function register(array $input) {
return $input['key1'];
}
}
我正在使用 Laravel,我需要将关联数组传递给 eloquent 模型中的静态函数。
class MyClass extends Eloquent\Model
{
static function scopeRegister($input) {
return $input['key1'];
}
}
运行 修补匠,这是我的意见:
$input = array('key1'=>'value', 'key2'=>'value', 'key3'=> 'value', 'key4'=>'value');
不过,当我尝试时,出现错误:
PHP error: Cannot use object of type Illuminate\Database\Eloquent\Builder as array
当我键入提示数组时:
class MyClass extends Eloquent\Model
{
static function scopeRegister(array $input) {
return $input['key1'];
}
}
我收到以下错误:
Argument 1 passed to App\KeywordGeotarget::scopeRegister() must be of the type array, object given
这里发生了什么,我如何从模型中的静态方法访问数组中定义的值?
编辑:我现在只是使用 tinker 来测试它,但这是我用来调用该方法的代码:
php artisan tinker
>> $input = array('key1'=>'value','key2'=>'value','key3'=>'value', 'key4'=>'value');
>> App\MyClass::register($input);
因为它是一个作用域,你需要添加一个$query
作为第一个参数,然后做这样的事情:
static function scopeRegister($query, array $input)
{
return $query->where($input['key1']);
}
如果你只想拥有一个方法而不想将它用作本地范围,只需重命名该方法(删除 scope
部分):
static function register(array $input)
您对添加查询范围的理解是错误的,我想您需要阅读我认为的文档。 Check it over here. 范围表示查询构建器属性,您无法将构建器 class 属性作为数组获取。你应该这样使用它。
class MyClass extends Eloquent\Model
{
public function scopeRegister($query) {
return $query->where(// perform your where here);
}
}
您正在定义一个 eloquent 范围。作用域不适用于数组,但适用于查询。
您可以在此处阅读有关如何声明和使用范围的更多信息https://laravel.com/docs/5.5/eloquent#local-scopes
如果您想像在 tinker 示例中那样调用 register()
,请改为执行此操作(只需删除作用域):
class MyClass extends Eloquent\Model
{
static function register(array $input) {
return $input['key1'];
}
}