从Laravel中的行中选择单个列?
如何从Laravel 4中的一行中获取一列 以下是我正在尝试的:从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
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');