从 Laravel 的一行中选择单列?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/23586452/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-09 02:48:32  来源:igfitidea点击:

Select single column from a row in Laravel?

laravellaravel-4

提问by mpen

How can I fetch a single column from a single row in Laravel 4?

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

Here's what I'm 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]);

selectOnereturns this ugly object though:

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

Is there something better?

有什么更好的吗?



Using PDO is ugly too:

使用 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();

采纳答案by mpen

To fetch a single value from the first result, you can use \Illuminate\Database\Query\Builder::value. e.g.

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

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

回答by Kurt Beheydt

Use this:

用这个:

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

From the inline documentation:

从内联文档:

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

回答by Antonio Carlos Ribeiro

Is this what you are looking for?

这是你想要的?

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

Another example

另一个例子

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

Raw didn't worked for you?:

Raw 对您不起作用?:

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]);

And you can process that object to get what you want:

您可以处理该对象以获得您想要的:

$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'

This is a test I just did here:

这是我刚刚在这里做的一个测试:

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

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

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

}]);

Worked like a charm.

像魅力一样工作。