PHP在雄辩的模型中运行原始SQL查询

时间:2018-07-13 11:46:17

标签: php laravel eloquent containers

我正在尝试在自己的旧项目中使用Laravel中的Eloquent ORM。我已经建立了模型,并且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();

5 个答案:

答案 0 :(得分:2)

Laravel使用原始SQL ,流利的查询构建器口才的ORM ,使跨各种数据库后端的数据库交互变得极为简单>。

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

建议:您不应在模型内部创建原始SQL,而可以在控制器中创建原始SQL(尽管建议遵循存储库模式),但作为初学者,请按照以下步骤进行操作

更新您的HomeController以进行关注

  1. 使用data = pd.merge(df1,df2, on=['DAY'], how='outer') ;
  2. 更新索引方法

    Illuminate\Support\Facades\DB

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

Laravel是一个很好的框架。继续学习!

答案 1 :(得分:1)

  

DB::raw()用于生成未解析的任意SQL命令   进一步由查询构建器执行。   检查此参考。链接,以及更多详细信息:http://fideloper.com/laravel-raw-queries

Example中的\DB::raw\DB::select

答案 2 :(得分:0)

尝试whereRaw()函数

https://laravel.com/docs/5.6/queries

摘自文档:

  

whereRaw和orWhereRaw方法可用于在其中插入原始   子句进入您的查询。这些方法接受一个可选的数组   绑定作为第二个参数:

     

$ orders = DB :: table('orders')                   -> whereRaw('price> IF(state =“ TX”,?,100)',[200])                   -> get();

答案 3 :(得分:0)

尝试一下,切勿在Laravel中使用任何原始查询

/* @var User $query */
$user = new User();

/* @var Builder $query */
$query = $user->newQuery();

dd($query->select('*')->from('_users')->get());

答案 4 :(得分:0)

通过这种方式使用Laravel scopes(),您可以轻松使用口才好的语法。

$user = new User::customQuery();

public function scopeSustomQuery($query)
{
    $query = $query->where('You condition');
    return $query;
}