laravel在一个函数中执行两个查询

时间:2017-12-01 06:01:29

标签: php laravel

我只有两张桌子

  

GALLARIES AND MEDIA

在GALLARIES表id,title,venueId中,我保存了特定场地的gallary文件夹名称。 在MEDIA表中我有id,imagepath,is_thumb(0或1),gallery_Id

我想做的是当我设置is_thumb_image(1)然后我调用了两个函数

  

未设置图像的第1个全部使用gallery_id,并在我为特定图像设置is_thumb_image的第二个函数之后。

是否可以仅调用一个函数并执行这两个功能。

这是我的控制器代码。

        $albumId = $request->album_id; //table galleries id  - album name
        if($request->is_thumb_image == "true") { 
            $media1->UnsetThumbImage($albumId); // first unset thumb_image 
            $media->setThumbImage($media->id); // call for set thumb_image 
        } else {
            $request->is_banner_image = false;
        }

这是我的模型功能

 public function setThumbImage($mediaId) {
   try {
        DB::table('media')
            ->where('id', $mediaId)
            ->update(['is_thumb_image' => 1]);
        $this->is_thumb_image = 1;
    } catch (\Exception $ex) {
        echo $ex->getMessage();
        dd($ex->getTraceAsString());
    }
}

public function UnsetThumbImage($albumid) {
    DB::table('media')
    ->where('gallery_id', $albumid)
    ->update(['is_thumb_image' => 0]);
    $this->is_thumb_image = 1;
}

我怎样才能只调用一个函数。

2 个答案:

答案 0 :(得分:1)

您可以使用CASE with MySQL更新各种条件。您需要使用raw query与Laravel一起使用我相信。

类似的东西:

UPDATE media
SET is_thumb_image = CASE
    WHEN id = $mediaId THEN 1
    WHEN gallery_id = $albumId THEN 0
END

答案 1 :(得分:0)

为此您需要: 指定它将是哪一列。但最佳做法是以不同的方法执行此操作,因为它们具有不同的作业和列操作。

$this->setThumbImage('id', $id);
$this->setThumbImage('gallery_id', $id);

根据您的要求传递您需要的东西。

public function setThumbImage($id, $field) {
    DB::table('media')
      ->where("$field", $id)
      ->update(['is_thumb_image' => 0]);
$this->is_thumb_image = 1;

}