我想用我自己的从Laravels扩展而来的构建器类来替换Laravels。我原以为这会像App::bind
一样简单,但似乎不起作用。我应该把绑定和什么是正确的方式这样做Laravel?
这就是我曾经尝试过的:
我的建设者:
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文件中注册绑定,如下所示:
$app->bind('Illuminate\\Database\\Eloquent\\Builder', 'MyNameSpace\\Database\\Eloquent\\Builder');
return $app;
这两个答案在某种程度上都是正确的。你必须决定你的目标是什么。
改变雄辩的建设者
例如,如果您只想为有说服力的模型添加一个新方法(例如,类似于作用域,但可能更高级一些,因此在作用域中不可能)
创建一个扩展EloQuentBuilder的新类,例如CustomEloquentBuilder。
use Illuminate\Database\Eloquent\Builder;
class CustomEloquentBuilder extends Builder
{
public function myMethod()
{
// some method things
}
}
创建自定义模型并覆盖方法newEloquentBuilder
use Namespace\Of\CustomEloquentBuilder;
use Illuminate\Database\Eloquent\Model;
class CustomModel extends Model
{
public function newEloquentBuilder($query)
{
return new CustomEloquentBuilder($query);
}
}
更改数据库查询生成器
例如修改所有数据库访问的where子句
创建一个扩展数据库生成器的新类,例如CustomQueryBuilder。
use Illuminate\Database\Query\Builder;
class CustomQueryBuilder extends Builder
{
public function myMethod()
{
// some method things
}
}
创建自定义模型并覆盖newBaseQueryBuilder方法
use Namespace\Of\CustomQueryBuilder;
use Illuminate\Database\Eloquent\Model;
class CustomModel extends Model
{
protected function newBaseQueryBuilder()
{
$connection = $this->getConnection();
return new CustomQueryBuilder(
$connection, $connection->getQueryGrammar(), $connection->getPostProcessor()
);
}
}
Laravel版本:5.5/此代码未测试
上面的答案对拉威尔来说并不完全适用
https://github.com/laravel/framework/blob/5.2/src/Illuminate/Database/Eloquent/Model.php#L1868
用这个代替!
protected function newBaseQueryBuilder()
{
$conn = $this->getConnection();
$grammar = $conn->getQueryGrammar();
return new QueryBuilder($conn, $grammar, $conn->getPostProcessor());
}
类是一个内部类,因此它不是注入到类中的依赖关系,而是硬编码。
要执行您想要执行的操作,我将扩展illumb\Database\Eloquent\Model
到MyNamespace\Database\Eloquent\Model
类并重写newEloquentBuilder
函数。
public function newEloquentBuilder($query)
{
return new MyNamespace\Database\Eloquent\Builder($query);
}
然后别名MyNamespace\数据库\雄辩\模型
到雄辩
在app/config/app.php
中的别名
我得到了一个导入的文本块,但格式并不总是那么完美。之后我会尝试用jquery解决这个问题。所以我开始用 替换 : null null 但替换不起作用。最终的html应该如下所示:
getDrawable已弃用。我如何重写这段代码。我找不到答案。 什么是新的最好的方式来使用它的功能。
我的asp中有以下WebClient。net mvc web应用程序: 那么,有人可以建议我如何将它从WebClient更改为HttpClient吗?
问题内容: 在Java中,我有一个文件路径,例如“ C:\ A \ B \ C”,我希望将其更改为“ C:/ A / B / C”。如何替换反斜杠? 问题答案: String text = “C:\A\B\C”; String newString = text.replace(“\“, “/”); System.out.println(newString);
问题内容: 我试图将字符串分成数组并替换为,但无法做到,我也尝试了String.replaceAll这样的东西。 我想提供一个通往JNI的路径,并且它只能以这种方式读取。 问题答案: 在这种情况下不要使用- 这是用正则表达式指定的,这意味着您需要更多的转义。这应该很好: 请注意,由于Java字符串文字中的原因,反斜杠加倍-因此此处涉及的 实际 字符串是“单反斜杠”和“双反斜杠”-而不是双倍和四倍。
我有以下布局 一切正常,但我想用一个片段替换浏览器 这不是重新调整ViewPager的间距,我该怎么办???