gpt4 book ai didi

php - 如何替换 Laravel Builder 类

转载 作者:可可西里 更新时间:2023-11-01 12:47:38 24 4
gpt4 key购买 nike

我想用我自己的扩展类替换 Laravels 构建器类。我认为它会像 App::bind 一样简单,但它似乎不起作用。我应该在哪里放置绑定(bind)以及在 Laravel 中执行此操作的正确方法是什么?

这是我试过的:

我的 builder :

    use Illuminate\Database\Eloquent\Builder as BaseBuilder;
class Builder extends BaseBuilder
{

/**
* Find a model by its primary key.
*
* @param mixed $id
* @param array $columns
* @return \Illuminate\Database\Eloquent\Model|static|null
*/
public function find($id, $columns = array('*'))
{
Event::fire('before.find', array($this));
$result = parent::find($id, $columns);
Event::fire('after.find', array($this));
return $result;
}
}

接下来我尝试在 bootstrap/start.php 文件中注册绑定(bind),如下所示:

$app->bind('Illuminate\\Database\\Eloquent\\Builder', 'MyNameSpace\\Database\\Eloquent\\Builder');
return $app;

最佳答案

Illuminate\Database\Eloquent\Builder 类是一个内部类,因此它不是依赖注入(inject)到 Illuminate\Database\Eloquent\Model 类中,而是类在那里硬编码。

为了做你想做的事,我会将 Illuminate\Database\Eloquent\Model 扩展到 MyNamespace\Database\Eloquent\Model 类并覆盖 新的 EloquentBuilder 函数。

public function newEloquentBuilder($query)
{
return new MyNamespace\Database\Eloquent\Builder($query);
}

然后在 app/config/app.php< 中的 aliases 处将 MyNamespace\Database\Eloquent\Model 别名为 Eloquent/

关于php - 如何替换 Laravel Builder 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23475300/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com