从Laravel中的一行中选择单列?

mpe*_*pen 5 laravel laravel-4

如何从Laravel 4中的单行中获取单个列?

这是我正在尝试的:

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]);
Run Code Online (Sandbox Code Playgroud)

selectOne 虽然返回这个丑陋的对象:

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"
}
Run Code Online (Sandbox Code Playgroud)

还有更好的东西吗?


使用PDO也很难看:

$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();
Run Code Online (Sandbox Code Playgroud)

小智 21

用这个:

DB::table('users')->pluck('columname');
Run Code Online (Sandbox Code Playgroud)

从内联文档:

/**
 * Pluck a single column's value from the first result of a query.
 *
 * @param  string  $column
 * @return mixed
 */
Run Code Online (Sandbox Code Playgroud)


mpe*_*pen 1

要从第一个结果中获取单个值,您可以使用\Illuminate\Database\Query\Builder::value. 例如

$lastInvoice = DB::table('booking_groups')
    ->where('company_id','=',$booking->company_id)
    ->orderBy('invoice_number','desc')
    ->value('invoice_number');
Run Code Online (Sandbox Code Playgroud)