无法将Laravel的DB类注入位于另一个命名空间文件夹中的抽象类。
获取错误“调用未定义的方法Illuminate \ Support \ Facades \ DB :: table()”
- 检查:Working- 的 FrontController.php
<?php
use MyProject\MainPages\Front;
class indexController extends \BaseController {
/**
* @var Front
*/
private $Front;
/**
* @param ProductRepository $productRepo
*/
function __construct(Front $Front)
{
//Test
//$this->Front = $Front->goSetup();
}
}
- 检查:Working- 的 Front.php
<?php namespace MyProject\MainPages;
use MyProject\MainPages\NavigationSkeleton;
class Front extends NavigationBluPrint {
/**
* Begins the process, Step 1
*/
protected function goSetup() {
// $this->DB->table() etc
}
}
- 不工作 - 的 NavigationBluPrint.php
<?php namespace MyProject\MainPages;
use \DB;
abstract class NavigationBluPrint {
/**
* @var DB Laravel Database connection
*/
protected $dB;
public function __construct(DB $dB)
{
// SetDB so when extended it's already set for extended classes
$this->dB = $dB;
// Test below
$x = $this->dB->table('products')->get(); //Error: Call to undefined method Illuminate\Support\Facades\DB::table()
echo '<pre>';
print_r($x);
echo '<pre>';
}
}
如果我需要使用App ::做一些工作,我不明白它是如何完成的。谢谢
找到解决方案:如果其他人遇到同样的问题。
在抽象类“NavigationBluPrint.php”
中我取代了\ DB;与=&GT;使用\ Illuminate \ Database \ DatabaseManager作为DB;
似乎解决了这个问题,虽然我不确定它是从开始实例化新数据库还是使用相同的数据库。如果是前者那么它会失败的目的。
答案 0 :(得分:0)
您键入了为DB类设置外观,而不是DB类本身。
答案 1 :(得分:0)
通过对象使用静态方法的想法是错误的,这是不可能的。
你应该为数据库操作创建存储库,然后你可以大大注入它们。
创建Eloquent存储库或数据库存储库的说明:
我在这里找到了great article来做这件事。