2014-08-27 13 views
12

Ho bisogno di convertire questa query per Laravel e sto riscontrando problemi nel tentativo di creare un Insert ... Seleziona istruzione usando l'ORM di Laravel o Query. Non sono sicuro di come andrei a creare questa query.Crea un inserto ... Seleziona istruzione in Laravel

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 

Come è possibile creare questa query utilizzando l'ORM di Laravel?

EDIT: Non sono sicuro se questo è chiaro, ma sto pensando in termini di 1 interrogazione, come fanno qui http://dev.mysql.com/doc/refman/5.0/en/insert-select.html

+0

Si prega di andare attraverso la documentazione, che potrebbe essere più utile: http://laravel.com/docs/eloquent –

+0

Ho consultato la documentazione e ho provato diverse catene. Ma non sono ancora sicuro su come creare questo come ONE query vs. 2. – jamadri

+0

Eloquent non è pensato per occuparsi di cose come questa. Puoi semplicemente inserire la query all'interno di 'DB :: statement()'. – user3158900

risposta

26

Non c'è modo di fare questo in una query, però mi sono imbattuto lo stesso problema e voleva assicurarsi che posso continuare a utilizzare un certo selezionare costruisco con il QueryBuilder.

Allora, cosa si potrebbe fare, per mantenere le cose la metà di quello pulito e di riutilizzare le funzionalità che ha costruito una dichiarazione prescelta prima, è questa:

/** 
* 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, Laravel is a little 
* stupid here 
*/ 
$insertQuery = 'INSERT into user_debt_collection (email,dinero) ' 
       . $select->toSql(); 

\DB::insert($insertQuery, $bindings); 
+0

funziona perfettamente anche per Laravel 5.3 – Prashant

+0

questo è davvero fantastico. – caro

0

In primo luogo, è necessario creare un modello per Demand, così quindi è possibile utilizzare:

$demand = new Demand; 
$demand->Login = $login; 
$demand->Name = $name; 
[...] 
$demand->save(); // <~ this is your "insert" statement 
$id = $demand->id; 

quindi per la vostra dichiarazione prescelta si può fare qualcosa di simile a tali opzioni:

$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'; 

C'è molto di più informazioni nel manuale here e here

+0

L'istruzione select fa parte dell'inserto. Ho passato le documentazioni ma non vedo come fare qualcosa del genere: http://dev.mysql.com/doc/refman/5.0/en/insert-select.html Non c'è modo di fai questo usando una query in Laravel? So come lo farei in 2, ma ci vuole un minuto per farlo. Mi stavo chiedendo se esistesse qualcosa già creato per creare questa query. – jamadri

+0

Non penso che tu possa farlo all'interno dell'ORM di Eloquent ... ma potrei sbagliarmi –

+0

Non sono stato in grado di trovare un modo che è quello che ha sollevato questa domanda. – jamadri

8

È possibile utilizzare:

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]);