Shin
Shin

Reputation: 127

How to fetch data from database with 3 parameters Laravel

I'm still new to this laravel, for now I'm facing a trouble for fetching data from the database. What i want to get is when there are only one data available, the second parameters won't be executed, but if there are some data available on the second parameters, then all the data from first parameter and the second parameter will be called.

    $detail = Barang_Keluar_Detail::findOrFail($id); //15
    $cariid = $detail->pluck('barang_keluar_id');
    $instansiquery = Barang_Keluar::where('id',$cariid)->first(); //21
    $instansiid = $instansiquery->pluck('instansi_id');
    $tanggal = $instansiquery->pluck('tanggal')->first();//2019-12-31

and the parameter are here

    $cariinstasama = Barang_Keluar::where('id', $cariid)
        ->orWhere(function ($query) use($instansiid, $tanggal) {
            $query->where('tanggal', "'$tanggal'")
            ->where('instansi_id', $instansiid);
        });

Please any help will be appreciated, thank you.

Upvotes: 3

Views: 543

Answers (3)

Samuel Bié
Samuel Bié

Reputation: 900

Its not clear what exactly you want.

Are you applying more than one parameter on the query if the first parameter result gives you more than one row in the database? If yes check out my approach :

$query = new Model(); // the model you want to query
if($query->where('col1', $param1)->count() > 1) // checks if the query from the 1st parameter produces more than one row in the database
     $query = $query->where( // if yes apply more parameters to the query
        [
           ['col1', $param1],
           ['col2', $param2]
        ]
     );
else
    $query = $query->where('col1', $param1);
$results = $query->get();

Hope it helps....

Upvotes: 0

R.K.Saini
R.K.Saini

Reputation: 2708

Laravel query builder provides elegant way to put conditional clause using when() . You can put conditional clause on your query like this:

$cariinstasama = Barang_Keluar::where('id', $cariid)
    ->when($instansiid, function ($query, $instansiid) {
        return $query->where('instansi_id', $instansiid);
    })
    ->when($tanggal, function ($query, $tanggal) {
        return $query->where('tanggal', $tanggal);
    })->get();

For more info see https://laravel.com/docs/5.8/queries#conditional-clauses

Upvotes: 6

Prashant Deshmukh.....
Prashant Deshmukh.....

Reputation: 2292

You can try this as well.

$cariinstasama = Barang_Keluar::where('id', $cariid);

if($instansiid !== null)
{
   $cariinstasama->where('instansi_id', $instansiid); 
}

if($tanggal !== null) 
{
   $cariinstasama->where('instansi_id', $instansiid);
}

$result = $cariinstasama->get();

Upvotes: 3

Related Questions