php - 在模型 : Laravel 中运行原始 sql

标签 php laravel laravel-query-builder eloquent

我正在使用 Laravel 并且需要从模型/存储库类运行原始 sql 查询

INSERT INTO calendar 
(room_id, date, default_count, default_price) 
VALUES ('1', '2017-01-02', '2', '400004') 
ON DUPLICATE KEY UPDATE 
default_count = VALUES(default_count), default_price = VALUES(default_price);

例如。当我从 UserRepository 插入数据时

$this->users->insert(['email' => 'john@example.com', 'votes' => 0]);

我需要某种方法来获取数据库连接并通过模型运行 sql

//Something like
$this->users->execute($sql);

我看到 Laravel 有 updateOrInsert() 方法,但我需要同时为多个数据集运行它。

如何通过模型类或存储库运行原始 sql 查询?

谢谢

已更新 - 已解决

我经历了Eloquent Model Sourcecode并发现我可以从 getConnection() 方法获得连接

$this->users->getConnection()->statement($sql);

最佳答案

这样做

$query = array(['room_id' => 1, 'date' => '2/1/2017', 'default_count' => '2', 'default_price' => '400004'],
['room_id' => 2, 'date' => '2/1/2017', 'default_count' => '3', 'default_price' => '455004']);


 DB::table('calendar')->insart('query');

你也可以这样做, 创建模态对象并赋值

$obj_calendar = new Calendar();
$obj_calendar->room_id = 1;
$obj_calendar->date = date('Y-m-d H:i:s', strtotime('2017-01-02'));
$obj_calendar->default_count = 2;
$obj_calendar->default_price = 400004;
$obj_calendar->save();

使用交易

//开始交易

public function beginTransaction()
{
  DB::beginTransaction();
}

//进行交易

public function makeTransaction($query)
{
  DB::transaction(function($query) use($query)
  {
    DB::insert($query);
  });
}

//提交事务

public function commitTransaction()
{
  return DB::commit();
}

在你的方法中

public function insert($data)
{
  $this->beginTransaction();

  for($i=0; $i<count($data); $i++)
  {
    $name =  $data[$i]->first_name, "middle_name" => $data[$i]->middle_name, "last_name" => $data[$i]->last_name;

    $query = "INSERT INTO tbl_name(id, first_name, description, created_at, updated_at) VALUES (" . $data[$i]->id . ", " . $name . ", '" . $data[$i]->description . "', '" . date("Y-m-d H:i:s",strtotime($data[$i]->created_at)) . "', '" . date("Y-m-d H:i:s",strtotime($data[$i]->created_at)) . "'); ";

    $scraper_service->makeTransaction($query);
  }

  //Add last commit 
  $this->commitTransaction();
}

关于php - 在模型 : Laravel 中运行原始 sql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41037863/

相关文章:

php - 我如何编写两个链接到同一页面的不同工作?

php - Route.php 中的授权和身份验证 : Laravel 5. 1

php - laravel 通过标签获取相关帖子

javascript - 在帖子评论部分显示评论,无需重新加载页面

php - 如何在 php 中构建内存中的服务器端缓存?

php - MySql : can i query "WHERE ' $str' LIKE %table. col%"?

php - 在 Blade 中访问 Laravel .env 变量

php - Laravel - MySqlConnection'没有方法 'selectRaw'

php - 在 Laravel 中添加时间至今查询

php - 如何将此 MySQL 查询转换为等效的 Laravel 5.4 Elequent/查询生成器查询?