小编elb*_*8rm的帖子

PHP中抽象类的子类中的Typesafe / Type提示

我正在建立一个继承的框架的新部分。这是真正实施一些最佳实践的机会,因此我正在尝试做尽可能多的事情。

该框架在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)

php inheritance abstract-class class

5
推荐指数
1
解决办法
381
查看次数

使用外部项目文件夹中的作曲家

我用谷歌搜索了这个问题,但没有找到这个问题。我也查看了文档,但没有运气:

要运行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)

(我已经测试过并且不起作用)

我的具体问题:

有没有办法在目标文件夹上运行作曲家?

bash composer-php

3
推荐指数
1
解决办法
1417
查看次数

Laravel / Eloquent 预加载

对于某些人来说,这将是一个简单的问题,但我似乎无法在网上或文档中找到答案(只有我不想要的变体)。

  • 假设我们有一Question堂课
  • 每个Question对象可以选择有多个Tags

我已经设置了课程,一切都按预期进行。目前我使用:

  • $questions = Question::all();

这按预期工作,但它不会立即加载。

需要明确的是:$question->tags给出了我期望的数组。不存在关系问题。

由于新的要求,我将创建一个可能包含数千个问题的视图,因此这种急切的加载是必须的。

我尝试使用:

  • $questions = Question::with('tag')->all();

这给出了错误消息:

Builder.php 第 2345 行中的 BadMethodCallException:调用未定义的方法 Illuminate\Database\Query\Builder::all()

每个教程,或者我在谷歌上急切加载的方式,要么指定一个ID,要么是一个关于如何只向有孩子的父母显示的教程。

我只是想要“所有人和他们的孩子”。

这一定很容易......有人知道该怎么做吗?

谢谢瑞克

php laravel eloquent

1
推荐指数
1
解决办法
1359
查看次数