2011-08-13 27 views
5

Mam dwie tabele Accommodation i Facility, które są połączone w relacji wiele do wielu z trzecią tabelą, Accommodation_facility.Jak wstawić wiele rekordów do tabeli w tym samym czasie?

  • Zakwaterowanie (accommodation_id, Typ_zakwaterowania, nazwa)
  • Instrument (facility_id, facility_name)
  • Accommodation_facility (accommodation_id, facility_id)

Korzystanie Yii, jak możesz wstawić wiele rekordów danych do Accomodation_facility stół?

Odpowiedz

-2

Ponieważ twoje pytanie jest oznaczone jako "yii", domyślam się, że używasz Yii Framework. Zobacz Active Records na dokumencie - http://www.yiiframework.com/doc/guide/1.1/en/database.ar

Postępuj zgodnie z dokumentami, aby skonfigurować klasy AR dla swoich tabel, i po prostu zapętlić dane, które opublikujesz po przesłaniu listy checkbox. W tej pętli tworzysz, wypełniasz i zapisujesz obiekty AR dla tabel, dla których chcesz wstawić dane.

0
foreach($facilities as $facility) 
{ 
    $model = new Model; 
    $model->attributes = $facility // or $model->column = $facility 
    if ($model->validate()) 
     $model->save() 
} 
+0

w danym przypadku zostanie wstawiony tylko jeden rekord. prawdopodobnie ostatni. –

+3

Powinien istnieć '$ model-> isNewRecord = true;' w celu dodania wielu rekordów w pętli. –

11

Wkładanie za pomocą pętli jest bardzo wolne. Załóżmy, że masz 5000 wierszy do wstawienia, zajmie to około 6 minut (oddzielna wstawka dla każdego rekordu). Lepiej wstawić dane za pomocą pojedynczego zapytania:

Zajmie to 1/10 czasu.

+0

Lepsze expirience jest użycie '$ command-> bindValues' i placeholders następnie surowe dane, aby zapobiec iniekcji SQL. – FelikZ

2

Lepiej użyć bindParam, aby zapobiec zastrzykom SQL. I nie wiem, czy to jest najlepszy sposób, aby to zrobić, ale nie jest tak jak ja to robię:

$values = array(array(1,2),array(3,4),array(5,6),); 
$nbValues = count($values); 
$sql = 'INSERT INTO table_name (col_name1, col_name2) VALUES '; 
for ($i=0; $i < $nbValues; $i++) { 
    $sql .= '(:col1_'.$i.', :col2_'.$i.')'; 
    if ($i !== ($nbValues-1)) 
     $sql .= ','; 
} 
$command = Yii::app()->db->createCommand($sql); 
for ($i=0; $i < $nbValues; $i++) { 
    $command->bindParam(':col1_'.$i, $values[$i][0], PDO::PARAM_INT); 
    $command->bindParam(':col2_'.$i, $values[$i][1], PDO::PARAM_INT); 
} 
$command->execute(); 

Nadzieja to pomaga!

Powiązane problemy