【问题标题】:PHP Laravel Passing Model as function parameterPHP Laravel 传递模型作为函数参数
【发布时间】:2020-03-27 09:26:39
【问题描述】:

我需要将模型传递给函数,但似乎我的解决方案不正确,因为我从 PHPStorm 收到以下错误

期望 Illuminate\Database\Eloquent\Model 类型的参数,字符串给定。

这是我的代码的摘录:

 /** Return the model structure
  *
  * @param \Illuminate\Database\Eloquent\Model $model
  * @param array $fillData
  * @return object
  */
public static function fillBasicModelData(Model $model, $fillData){
 ...code...
}

下面是我如何调用函数:

$result = self::fillBasicModelData(Filter::class, $emptyFilter);

显然 Filter 是一个 Illuminate\Database\Eloquent\Model

所以我的问题是如何在没有此警告的情况下将模型传递给函数?

谢谢

【问题讨论】:

  • 你应该传递一个类对象,而不是类名。
  • 谢谢,这可以是一个很好的解决方案还是有更好的方法? $model = 新过滤器; $result = self::fillBasicModelData($model, $emptyFilter);
  • 试试 $result = self::fillBasicModelData((new Filter()), $emptyFilter);

标签: php laravel


【解决方案1】:

显然 Filter 是一个 Illuminate\Database\Eloquent\Model

不,不是。你用Filter::class 传递它。这是模型的类,而不是实例。基本上它转换为字符串'\NameSpace\SomeThing\Filter'

因为您传递的是类,而不是模型实例,所以您需要它来实例化模型。

public static function fillBasicModelData($model_class, $fillData){
 $model = new $model_class($fillData);
 // ...code...
}

【讨论】:

  • 谢谢,我怎样才能通过模型​​而不是类?我还尝试使用 self::fillBasicModelData(Filter, $emptyFilter); 传递模型但似乎不起作用:(
  • 你需要自己实例化模型。 $filter = new Filter(); self::fillBasicModelData($filter, $emptyFilter);
猜你喜欢
  • 2014-01-18
  • 2018-09-24
  • 2018-09-02
  • 2018-07-06
  • 2021-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-03
相关资源
最近更新 更多