Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Laravel中的行中选择单个列?_Laravel_Laravel 4 - Fatal编程技术网

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

从Laravel中的行中选择单个列?,laravel,laravel-4,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

如何从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]);
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"
}
有更好的吗

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

这就是你要找的吗

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();
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]);
您可以处理该对象以获得您想要的:

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

}]);
工作起来很有魅力。

用这个:

DB::table('users')->pluck('columname');
从内联文档中:

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

要从第一个结果中获取单个值,可以使用\light\Database\Query\Builder::value。e、 g


如果我没弄错的话,那我还是会大吵大闹的。另外,我本身没有表,所以我不能使用DB::table。权限不是表?你错了,->select'columnName'告诉laravel给你一个列,->take1告诉它获取一行。它是一个表,但如果你阅读我的查询,整个内容都在EXISTS*子句中-没有来自的根级别。所以使用DB::raw。如果它只是一个exists,那么查询本身应该只返回一列,而Laravel将只返回该列。当您直接在数据库中运行该查询时,您会得到什么?我不知道laravel是否有selectOne方法。第二,上面的SQL语句总是只返回一行,可以是true,也可以是false。@itachi Laravel确实有一个selectOne方法,但它只返回一行,而不是一列。它返回一个对象,带有一个愚蠢的命名属性整个查询,除非我给它一个别名,然后把它从那里拉出来,我当然可以这样做,我只是在寻找更干净的东西。让我猜猜,你的问题是,你不想获取,而是直接获取bool结果。正当cz使用别名将很容易解决此问题。您的问题的答案是Pull,但您肯定需要将该列别名为DB,因为生成的列using exists具有整个查询的名称。您能否使用where子句@Kurt Beheydt?Add->first来实际获取值,而不是集合;在Laravel 5.2中,这将获取整个列。
$lastInvoice = DB::table('booking_groups')
    ->where('company_id','=',$booking->company_id)
    ->orderBy('invoice_number','desc')
    ->value('invoice_number');