Javed
Javed

Reputation: 857

laravel perform two query in one function

Simply i have a two table

GALLARIES AND MEDIA

In a GALLARIES table id,title,venueId i have saved gallary folder name for the particular venue. In MEDIA Table I have id,imagepath,is_thumb(0 or 1),gallery_Id

What i want to do is when i set is_thumb_image(1) then i have call two function

1 st for unset image all with gallery_id and after i call second function for set is_thumb_image for particular image.

Is it possible to call one function only and perform both functionalty.

Here is my Controller code.

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

Here is my model functions

 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;
}

How can i do it calling only one function.

Upvotes: 0

Views: 299

Answers (2)

Matt McAlister
Matt McAlister

Reputation: 428

You can use CASE with MySQL to update on various conditions. You'd need to use a raw query to do this with Laravel I believe.

Something like:

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

Upvotes: 1

Rishabh Aryal
Rishabh Aryal

Reputation: 32

For that you need to: specify which column is it gonna be. But best practice is to do this in different methods, as they have different jobs, and column action.

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

Pass what you need to according to your requirement.

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

}

Upvotes: 0

Related Questions