Запуск сырой sql внутри Модель: Laravel

Я использую Laravel и мне нужно запустить сырой SQL-запрос из класса Model / Repository

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' => '[email protected]', 'votes' => 0]);

Мне нужен какой-то метод, чтобы получить соединение с БД и запустить SQL через модель

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

Я видел, что у Laravel updateOrInsert() метод, но мне нужно запустить это для нескольких наборов данных одновременно.

Как запустить необработанный SQL-запрос через класс модели или репозиторий?

Спасибо

ОБНОВЛЕНО — РЕШЕНО

я прошел сквозь Eloquent Модель Исходный код и обнаружил, что я могу получить соединение из метода getConnection ()

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

5

Решение

Делай так

$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();
}
0

Другие решения

Я прошел через Eloquent Model Sourcecode и обнаружил, что могу получить соединение с помощью метода getConnection ()

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

Не знаю оператор () — лучший способ запустить этот sql. Однако это сработало.

Спасибо всем за помощь. Также, если у вас есть лучшее решение, пожалуйста, дайте мне знать

0

По вопросам рекламы [email protected]