如何将原始查询结果从控制器传递给视图?

How to pass Raw query result from controller to view?

我需要从数据库中生成一个数字,并在查看输入时显示它。

我在 MySQL 上使用函数来实现,所以我使用原始表达式。

    $nomor = DB::table('customers')- 
    >selectRaw('concat(year(now()),lpad(month(now()),2,0),lpad(id, 3, 0))  
    as nomor')
    ->where('id', '=', $customers->id)->get();

当我将变量传递到视图中时,

<input type="text" class="form-control  @error('nomor') is-invalid @enderror" id="nomor" placeholder="" name="nomor" value="{{ $nomor }}">

当前结果:

"[{"nomor":"201909001"}]"

我的预期结果是:

201909001 withoutquote

当您调用 get() 函数时,函数 returns 一个包含所有查询结果的数组。

例如,如果您的 select returns 3 行,则 $nomor returns 具有 3 个位置的集合(类似于类固醇数组),每行一个由查询返回,在每个位置,get() 函数 returns 一个对象,其属性与您的 select 相同,因此,在这种情况下,访问 [=14] 的正确方法=] 列是:

<input type="text" class="form-control  @error('nomor') is-invalid @enderror" id="nomor" placeholder="" name="nomor" value="{{ $nomor[0]->nomor }}">

注意,我们只调用 $nomor 对象,而是访问结果的第一行 $nomor[0] 并获取与查询的列名对应的 属性 $nomor[0]->nomor

当您使用 ->get() 时,您会得到一个 Collection,它本质上是一个具有附加功能的数组。当您使用 {{ $nomor }} 时,您将输出 Collection 的全部内容。要解决此问题,请使用 ->first():

$nomor = DB::table('customers')
->selectRaw('concat(year(now()),lpad(month(now()),2,0),lpad(id, 3, 0)) as nomor')
->where('id', '=', $customers->id)
->first();

然后在您看来,将其作为 object 访问(因为 DB::table()->first() 将 return 访问 stdClass):

<input type="text" ... value="{{ $nomor->nomor }}"/>