php - PHP 在 eloquent 模型中运行原始 SQL 查询
问题描述
我正在尝试在我自己的遗留项目中使用 Laravel 的 Eloquent ORM。我已经设置了模型并且 Eloquent 工作正常,但我不明白如何使用模型内的 eloquent 数据库连接运行原始 SQL 查询。我现在需要运行原始 SQL 查询,直到我可以重构整个代码库以使用 ORM。
namespace App\Providers;
use Illuminate\Database\Capsule\Manager;
use League\Container\ServiceProvider\AbstractServiceProvider;
class DatabaseServiceProvider extends AbstractServiceProvider
{
protected $provides = [
Manager::class
];
public function register()
{
$container = $this->getContainer();
$config = $container->get('config');
$config = $config->get('db.mysql');
$capsule = new Manager;
$capsule->addConnection([
$config
]);
$capsule->setAsGlobal();
$capsule->bootEloquent();
$container->share(Manager::class, function () use ($capsule){
return $capsule;
});
}
}
现在在我的模型中,我有以下内容:
namespace App\Models;
use Illuminate\Database\Eloquent\Model as Eloquent;
class User extends Eloquent
{
protected $table = '_users';
}
然后我试图在我的控制器中调用该模型:
namespace App\Controllers;
use App\Views\View;
use App\Models\User;
use Psr\Http\Message\RequestInterface;
use Psr\Http\Message\ResponseInterface;
class HomeController
{
protected $view;
public function __construct(View $view)
{
$this->view = $view;
}
public function index(RequestInterface $request, ResponseInterface $response)
{
$user = User::find(1);
dump($user);
}
}
所以这一切都很好,但我不知道如何在模型内部运行原始查询?显然下面的方法不起作用,但我想要这样的东西,创建一个新函数并返回结果:
模型:
public function customQuery()
{
$query = 'SELECT * FROM _users';
return $query;
}
控制器:
$user = new User;
$user->customQuery();
解决方案
Laravel 使用原始 SQL、流畅的查询构建器和Eloquent ORM使跨各种数据库后端的数据库交互变得非常简单。
这三个都有自己的标准语法格式。
建议:您不应该在模型中创建原始 SQL,而是可以在控制器中创建(尽管建议遵循存储库模式)但作为初学者,以下步骤将为您提供预期的结果
更新您的 HomeController 以进行以下操作
- 使用
Illuminate\Support\Facades\DB
; 更新索引方法
public function index() { $users = DB::select('SELECT * FROM users'); dd($users); }
参考:https ://laravel.com/docs/5.6/database#running-queries
Laravel 是一个很棒的框架。保持学习 !!
推荐阅读
- python-3.x - 如何使用openCV从图像中清除数字?
- javascript - 如何在 sharepoint 现代 UI 中的特定文档集中显示自定义命令集?
- powershell - 使用 Find-Item 命令时如何获取演示详细信息/渲染属性?
- python - python没有读取整个文件
- kubernetes - 为什么 kubectl describe secret 不起作用?
- laravel - 如何使用 Laravel 框架从公共文件夹访问样式表和 js 文件
- git - 如何克隆特定分支并仅在 GIT 中将更改推送到该分支
- python - 在 Python 中,我如何读取值以某个字符串开头的所有列?
- reactjs - 如何使用 React 组件显示 Google Maps InfoWindow
- php - jQuery onclick 函数通过 AJAX 调用 PHP 中的函数