sqlite laravel 9上的数组到字符串转换问题

wko9yo5t  于 2022-11-30  发布在  SQLite
关注(0)|答案(1)|浏览(137)

当我试图将查询结果打印到SQLite时,我得到了这个错误,但是对于查询只有一个可能的答案。那么,为什么它返回一个数组呢?

$rGDE = DB::select('select "' . $gestiondeempresas . '" from competencias2 where nombre == "' . $username . '"');

print($rGDE);

我希望得到一个数字,而不是数组。我试着搜索一个解决方案,我发现如果我用途:

$pritnableRaw = str_replace("'", "\'", json_encode($rGDE));

print($pritnableRaw);

我得到:

[{"gestiondeempresas":"0"}]

这是我想要达到的,但我不知道如何从那里得到唯一的数字。

  • 我使用的是Laravel最新版本(9.41.0)和SQlite数据库。
flseospp

flseospp1#

我希望我正确地理解了你的问题和意图,如果我没有理解,我向你道歉。
使用DB::select(...args)方法将返回一个数组,如函数文档中所示:

/**
     * Run a select statement against the database.
     *
     * @param  string  $query
     * @param  array  $bindings
     * @param  bool  $useReadPdo
     * @return array
     */

有三个其他的选择来帮助你达到你想要的。我个人的偏好在于选择3,但它取决于你,你决定什么最能满足你的需要。

[ ]选项1

如果你想得到一条记录,你可以使用DB::selectOne(...args),它只给予你一行,而不是一个行数组。
然而,这仍然不是一个单一的值。你必须访问你从结果数组中选择的列。

<?php
$result = DB::selectOne($myQuery);
// Results = ['my_column' => 0]
$value = $result['my_column'];
print($value);

// > 0

[ ]选项2

实际上,有一个方法可以为您处理这一额外步骤:标量函数
通过执行DB::scalar($query);,您将从第一个结果 * 中获得第一列的 * 值。这意味着,只要您在查询中选择了正确的列,您就将获得该列的值。

<?php
$rGDE = DB::scalar('select "'.$gestiondeempresas.'" from competencias2 where nombre == "'.$username.'"');

print($rGDE);
// > 0

[x]选项3

到目前为止,上述选项与您自己的个人解决方案风格相同。***但是,** 我建议您尽可能多地使用Eloquent
如果为competencias2表定义了一个模型,则可以按如下方式构建查询:

<?php

$competencias = App\Models\Competencias::where('nombre', $username)->first();

$rGDE = $competencias->gestiondeempresas;

Eloquent是Laravel提供的一个非常强大的工具,它允许你做一些非常酷的事情。如果你想得到一个包含所有从查询返回的值的数组,你可以把它改为:

<?php
$competenciasCollection = App\Models\Competencias::where('nombre', $username)->get();

$competenciasCollection->pluck('gestiondeempresas');
// [0,1,2, etc.]
  • 这是固执己见

相关问题