2017-08-04 4 views
1

アパートメントのテーブルに複数の画像を読み込んで多対多の関係を作成するにはどうすればよいですか?多対多を使用して複数の画像をアップロードするYii2

私はモデルのアパートがあります。

public function getApartmentImages() 
{ 
    return $this->hasMany(ApartmentImages::className(), ['apartment_id' => 'id']); 
} 

public function getImages() 
{ 
    return $this->hasMany(Images::className(), ['id' => 'image_id']) 
     ->via('apartmentImages'); 
} 

モデル画像:

public function getApartmentImages() 
{ 
    return $this->hasMany(ApartmentImages::className(), ['image_id' => 'id']); 
} 

/** 
* @return \yii\db\ActiveQuery 
*/ 
public function getApartments() 
{ 
    return $this->hasMany(Apartment::className(), ['id' => 'apartment_id']) 
     ->via('apartmentImages'); 
} 

モデルApartmentImages

public function getImage() 
{ 
    return $this->hasOne(Images::className(), ['id' => 'image_id']); 
} 

public function getApartment() 
{ 
    return $this->hasOne(Apartment::className(), ['id' => 'apartment_id']); 
} 

アパートメントには、メイン画像(レイアウト)および他の多くを持っています。

私はレイアウトの負荷を作るために管理:

public function actionCreate() 
{   
    $model = new Apartment(); 
    $model->load(Yii::$app->getRequest()->getBodyParams(), ''); 
    $layout = new Images(); 
    $layout->imageFile = UploadedFile::getInstanceByName('layout'); 
    if ($layout->upload()) { 
     $model->layout_id = $layout->id; 
    }   
    if ($model->validate()) { 
     if ($model->save()) { 
      $response = Yii::$app->getResponse(); 
      $response->setStatusCode(201); 
      $id = implode(',', array_values($model->getPrimaryKey(true))); 
      $response->getHeaders()->set('Location', Url::toRoute(['view', 'id' => $id], true)); 
     } elseif (!$model->hasErrors()) { 
      throw new ServerErrorHttpException('Failed to create the object for unknown reason.'); 
     } 
    } 
    return $model; 
} 

答えて

0

は、私はすべて送信された写真で、配列を満たし、かつループ内で私がサイトにアップロードし、私が作成

//INSERT INTO `apartment_images` (`apartment_id`, `image_id`) VALUES (...) 
$model->link('images', $images[0]); 

を使用してリンクテーブルのエントリ。

public function actionCreate() 
{ 
    $model = new Apartment(); 
    $model->load(Yii::$app->getRequest()->getBodyParams(), ''); 
    $layout = new Images(); 
    $layout->imageFile = UploadedFile::getInstanceByName('layout'); 
    $layout->validate(); 
    if ($layout->upload()) { 
     $model->layout_id = $layout->id; 
    } 
    $count = count(UploadedFile::getInstancesByName('images'));//Get the number of images 
    $images = [new Images()];//First image required 
    $images[0]->imageFile = UploadedFile::getInstanceByName('images[0]'); 
    if(!$images[0]->validate()) return $images[0]->errors;//Check errors 
    if ($model->validate()){ 
     if ($model->save()) { 
      if ($images[0]->upload()) { 
       $model->link('images',$images[0]);//Binding many to many 
      } 
      for($i = 1; $i < $count; $i++) {//Check the rest and repeat again 
       $images[$i] = new Images(); 
       $images[$i]->imageFile = UploadedFile::getInstanceByName('images['.$i.']'); 
       if ($images[$i]->upload()) { 
        $model->link('images',$images[$i]); 
       } 
      } 
      $response = Yii::$app->getResponse(); 
      $response->setStatusCode(201); 
      $id = implode(',', array_values($model->getPrimaryKey(true))); 
      $response->getHeaders()->set('Location', Url::toRoute(['view', 'id' => $id], true)); 
     } elseif (!$model->hasErrors()) { 
      throw new ServerErrorHttpException('Failed to create the object for unknown reason.'); 
     } 
    } 
    else return $model->errors; 
    return $model; 
} 
関連する問題