Select a single column from a row in Laravel?

How can I get one column from one row in Laravel 4?

Here is what I am trying:

return DB::selectOne("
    SELECT EXISTS(
        SELECT *
        FROM permissions p
            JOIN role_permissions rp ON rp.permission_id=p.id
            JOIN user_roles ur ON ur.role_id=rp.role_id
        WHERE ur.user_id=? AND p.code=?
    )
    ",[Auth::user()->id,$perm_code]);

selectOne returns this ugly object:

object(stdClass)#297 (1) {
  ["EXISTS(
                SELECT *
                FROM permissions p
                    JOIN role_permissions rp ON rp.permission_id=p.id
                    JOIN user_roles ur ON ur.role_id=rp.role_id
                WHERE ur.user_id=? AND p.code=?
      "]=>
  string(1) "0"
}

Is there anything better?


Using PDO is also ugly:

$stmt = DB::getPdo()->prepare("
    SELECT EXISTS(
        SELECT *
        FROM permissions p
            JOIN role_permissions rp ON rp.permission_id=p.id
            JOIN user_roles ur ON ur.role_id=rp.role_id
        WHERE ur.user_id=? AND p.code=?
    )
    ");
$stmt->execute([Auth::user()->id,$perm_code]);
return (bool)$stmt->fetchColumn();
+4
source share
3 answers

To extract a single value from the first result, you can use \Illuminate\Database\Query\Builder::value. eg

$lastInvoice = DB::table('booking_groups')
    ->where('company_id','=',$booking->company_id)
    ->orderBy('invoice_number','desc')
    ->value('invoice_number');
0
source

Use this:

DB::table('users')->pluck('columname');

From the built-in documentation:

/**
 * Pluck a single column value from the first result of a query.
 *
 * @param  string  $column
 * @return mixed
 */
+20
source

, ?

DB::table('users')->select('columnName')->join('whatever',...,...,...)->take(1)->get();

DB::table('users')
            ->join('contacts', 'users.id', '=', 'contacts.user_id')
            ->join('orders', 'users.id', '=', 'orders.user_id')
            ->select('columnName')
            ->take(1)
            ->get();

?:

return DB::select(DB::raw("
    SELECT EXISTS(
        SELECT *
        FROM permissions p
            JOIN role_permissions rp ON rp.permission_id=p.id
            JOIN user_roles ur ON ur.role_id=rp.role_id
        WHERE ur.user_id=? AND p.code=?
    ))
    ",[Auth::user()->id,$perm_code]);

, , :

$result = DB::select(DB::raw("
    SELECT EXISTS(
        SELECT *
        FROM permissions p
            JOIN role_permissions rp ON rp.permission_id=p.id
            JOIN user_roles ur ON ur.role_id=rp.role_id
        WHERE ur.user_id=? AND p.code=?
    ) as exists)
    ",[Auth::user()->id,$perm_code]);

$result[0]->exists ? '1' : '0'

, :

Route::any('test', ['as' => 'test', function()
{

    $result = DB::select(DB::raw('select exists(select * from users) as  exists;'));

    dd($result[0]->exists ? '1' : '0');

}]);

.

+3

Source: https://habr.com/ru/post/1540070/


All Articles