首页 > 解决方案 > 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();

标签: phplaraveleloquentcontainers

解决方案


Laravel 使用原始 SQL、流畅的查询构建器和Eloquent ORM使跨各种数据库后端的数据库交互变得非常简单。

这三个都有自己的标准语法格式。

建议:您不应该在模型中创建原始 SQL,而是可以在控制器中创建(尽管建议遵循存储库模式)但作为初学者,以下步骤将为您提供预期的结果

更新您的 HomeController 以进行以下操作

  1. 使用Illuminate\Support\Facades\DB;
  2. 更新索引方法

    public function index()
    {
        $users = DB::select('SELECT * FROM users');
    
        dd($users);
    }
    

参考:https ://laravel.com/docs/5.6/database#running-queries

Laravel 是一个很棒的框架。保持学习 !!


推荐阅读