source

삽입... 만들기Laravel에서 문 선택

ittop 2023. 9. 14. 23:37
반응형

삽입... 만들기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

반응형