삽입... 만들기Laravel에서 문 선택
라라벨을 위해 이 쿼리를 변환해야 하는데 삽입 프로그램을 만드는 데 문제가 있어요.Laravel의 Expulont ORM 또는 Query를 사용하여 문을 선택합니다.이 쿼리를 만드는 방법을 잘 모르겠습니다.
Insert into Demand (Login, Name, ApptTime, Phone, Physician, Location, FormatName, FormatDate, FormatTime, ApptDate, FormatPhone, cellphone)
Select Login, Name, ApptTime, Phone, Physician, Location, FormatName, FormatDate, FormatTime, ApptDate, FormatPhone, cellphone from " . [dbname] . "
Where " . $where_statement
Laravel의 ORM을 사용하여 이 쿼리를 만드는 것은 어떻게 가능합니까?
편집: 이것이 명확한지는 모르겠지만, 저는 여기 http://dev.mysql.com/doc/refman/5.0/en/insert-select.html 에서 하는 것처럼 1개의 쿼리로 생각하고 있습니다.
Laravel 5.7이 아닌 한 하나의 쿼리에서 이 작업을 수행할 수 있는 방법은 없지만, 같은 문제를 발견하여 QueryBuilder로 빌드하는 특정 선택 항목을 계속 사용할 수 있는지 확인하고 싶었습니다.
따라서 사용자가 수행할 수 있는 작업은 다음과 같습니다. 깨끗한 상태를 절반으로 유지하고 이전에 select 문을 구축했던 기능을 재사용하는 것입니다.
/**
* Wherever your Select may come from
**/
$select = User::where(...)
->where(...)
->whereIn(...)
->select(array('email','moneyOwing'));
/**
* get the binding parameters
**/
$bindings = $select->getBindings();
/**
* now go down to the "Network Layer"
* and do a hard coded select
*/
$insertQuery = 'INSERT into user_debt_collection (email,dinero) '
. $select->toSql();
\DB::insert($insertQuery, $bindings);
업데이트 라라벨 5.7
Laravel 5.7.17부터는 -> insert Using()을 사용할 수 있습니다.자세한 내용은 여기를 참조하십시오.이 점을 지적해주신 @Soulriser님께 감사드립니다.
위의 쿼리는 다음과 같습니다.
DB::table('user_debt_collection')->insertUsing(['email','dinero'], $select);
다음을 사용할 수 있습니다.
DB::insert("insert into contacts(contact_id,contact_type,account_id,created_at,updated_at) select f.id,'App\\Friend',f.account_id,f.created_at,f.updated_at from friends as f where f.id=?",[16]);
DB::statement("...")를 사용했습니다;
DB::statement("INSERT INTO table (SELECT)");
Laravel 5.5에서는 좀 더 쉽게 실행할 수 있도록 도우미 기능을 만들었습니다.
class QueryHelper
{
/**
* @param string $model
* @param array $columns
* @param Builder $select
* @return bool
*/
public static function insertFromSelectStatement($model, $columns, $select)
{
/** @var \Illuminate\Database\Query\Builder $query */
$query = (new $model)->getQuery();
$sql = "insert into {$query->from} (". implode(', ', $columns) .") {$select->toSql()}";
return $query->getConnection()->insert($sql, $select->getBindings());
}
}
예를 들어,
$notification = Notification::create([
'title' => 'this is title',
'message' => 'this is message',
]);
$now = DB::raw("'". Carbon::now()->toDateTimeString() ."'");
$selectActivatedUsers = User::select('id', $notification->id, $now, $now)->where('status', '=', 'activated');
// insert notifications to activated users
QueryHelper::insertFromSelectStatement(UserNotification::class, ['user_id', 'notification_id', 'created_at', 'updated_at'], $selectActivatedUser);
이거 먹어봐요.
DB::table(table2)
->insert(
(array) DB::table(table1)
->where('column', '=', $variable)
->select('column1','column2')
->first()
);
먼저, 다음에 대한 모델을 작성해야 합니다.Demand
, 그러면 다음을 사용할 수 있습니다.
$demand = new Demand;
$demand->Login = $login;
$demand->Name = $name;
[...]
$demand->save(); // <~ this is your "insert" statement
$id = $demand->id;
그러면 선택한 문에 대해 다음 옵션과 유사한 작업을 수행할 수 있습니다.
$demand = Demand::find($id); // will be similar to: SELECT * FROM Demand WHERE `id` = '$id';
$demand = Demand::where('id', $id)->get(); //same as above
$demand = Demand::where('id', $id)->get(array('Login', 'Name')); // will be similar to: SELECT `Login`, `Name` FROM Demand WHERE `id` = '$id';
언급URL : https://stackoverflow.com/questions/25533608/create-a-insert-select-statement-in-laravel
'source' 카테고리의 다른 글
사지 마비 프로그래머를 위한 최고의 프로그래밍 보조 도구 (0) | 2023.09.14 |
---|---|
WordPress 코딩 표준에 따라 VS Code에서 Intellephens를 설정할 수 있습니까? (0) | 2023.09.14 |
날짜를 기준으로 볼륨 계산 (0) | 2023.09.14 |
여러 도메인 포인팅 루트 폴더는 web.config의 도메인 이름에 따라 하위 폴더를 포인팅해야 합니다. (0) | 2023.09.14 |
문자열 형식의 ORACLE RAW(오라클 RAW)에서 표준 GUID로 (0) | 2023.09.14 |