使用call_user_func_array调用多个方法

时间:2016-11-14 07:20:35

标签: php laravel-5

我使用下面的代码来获取所有相关的模型数据

protected $model = '';

public function getAll()
{
    return call_user_func_array([$this->model, "get"], []);
}

它现在的工作,但我怎么能通过call_user_func_array处理链方法?例如:

我需要像:

 Model::where('user_id', $user_id)->get();

一个解决方案是(new $ this-> model) - > where();我认为这是一个坏主意。有什么解决方案吗?

3 个答案:

答案 0 :(得分:1)

如果需要调用getById getByColumnName方法,可以使用PHP的Magic函数。

在您的基础存储库中:

$client->getClient()
   ->setDefaultOption('config/curl/' . CURLOPT_SSL_VERIFYPEER, false);

在你的模特中:

public function __call($method, $parameters)
{
    if(startsWith($method, 'getBy'))
    {
        return $this->model->findBy(snake_case(substr($method, 6)), $parameters[0]);
    }
    else
    {
        throw new Exception("$method not found!");
    }
}

答案 1 :(得分:0)

您可以尝试:

$modelName = $this->model;
$modelName::where('user_id', $user_id)->get();

答案 2 :(得分:0)

call_user_func_array用于低级别调用函数并减少一些我现在不关心的问题,而不是(new $ this-model) - > blob-> blob可以用于正常形式的链。我认为实例化对象的性能比call_user_func_array好。