我正在建立一个继承的框架的新部分。这是真正实施一些最佳实践的机会,因此我正在尝试做尽可能多的事情。
该框架在php5.4(Windows环境)中运行。
我已经建立了一个抽象类BaseModel。在本文中,我定义了几个核心功能,例如:通用访问器和通用数据库交互。
然后,我将其扩展以创建将要使用的模型。在测试用例中,文件“ UserModel”创建一个名为“ User”的类。
在BaseModel中,我正在创建以下抽象函数:
abstract public function getById($id);
Run Code Online (Sandbox Code Playgroud)
然后在UserModel中定义此功能
public function getById($id)
{
// just a test!
return 'this works!';
}
Run Code Online (Sandbox Code Playgroud)
我想强制执行类型安全。但是,如果我做这样的事情,我会出错:
public function getById(User $id)
{
// just a test!
return 'this works!';
}
Run Code Online (Sandbox Code Playgroud)
我可以做到以下几点
abstract public function getById(BaseModel $id);
public function getById(BaseModel $id)
{
// just a test!
return 'this works!';
}
Run Code Online (Sandbox Code Playgroud)
哪个可行,但说实话也没那么有用。User是BaseModel类型的,但其他所有扩展类也是。我想做的是这样的:
abstract public function getById(BaseModel $id);
public function persist(User $item)
{
// just a test!
return 'this works!';
}
Run Code Online (Sandbox Code Playgroud)
我知道我可以在这些行中添加一条手动进行typeafing的行(伪代码)
if ($item instanceof …Run Code Online (Sandbox Code Playgroud) 我用谷歌搜索了这个问题,但没有找到这个问题。我也查看了文档,但没有运气:
要运行composer update,该命令通常从项目内部运行。
所以...
cd /var/www/html/project
composer update
Run Code Online (Sandbox Code Playgroud)
这按预期工作。
但是,作为更新脚本的一部分,我想在 bash 脚本中运行它。Composer 已全局安装。我希望能够从带有目标文件夹的脚本位置运行作曲家..类似:
composer update /var/www/html/project
Run Code Online (Sandbox Code Playgroud)
(我已经测试过并且不起作用)
我的具体问题:
有没有办法在目标文件夹上运行作曲家?
对于某些人来说,这将是一个简单的问题,但我似乎无法在网上或文档中找到答案(只有我不想要的变体)。
Question堂课Question对象可以选择有多个Tags我已经设置了课程,一切都按预期进行。目前我使用:
$questions = Question::all();这按预期工作,但它不会立即加载。
需要明确的是:$question->tags给出了我期望的数组。不存在关系问题。
由于新的要求,我将创建一个可能包含数千个问题的视图,因此这种急切的加载是必须的。
我尝试使用:
$questions = Question::with('tag')->all();这给出了错误消息:
Builder.php 第 2345 行中的 BadMethodCallException:调用未定义的方法 Illuminate\Database\Query\Builder::all()
每个教程,或者我在谷歌上急切加载的方式,要么指定一个ID,要么是一个关于如何只向有孩子的父母显示的教程。
我只是想要“所有人和他们的孩子”。
这一定很容易......有人知道该怎么做吗?
谢谢瑞克