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

时间:2019-09-26 20:22:21

标签: php laravel laravel-query-builder laravel-views

我需要从数据库生成一个数字,并在视图的输入中显示它。

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

当前结果:
current result

  

“ [{” nomor“:” 201909001“}]”

我的预期结果是:

  

201909001 不带引号

2 个答案:

答案 0 :(得分:0)

调用get()函数时,该函数将返回包含查询所有结果的数组。

例如,如果您的select返回3行,则$nomor返回具有3个位置的集合(如带有类固醇的数组),查询返回的每行一个,在每个位置,{{1 }}函数返回一个带有属性的对象作为您的选择,因此,在这种情况下,访问get()列的正确方法是:

nomor

请注意,我们只调用<input type="text" class="form-control @error('nomor') is-invalid @enderror" id="nomor" placeholder="" name="nomor" value="{{ $nomor[0]->nomor }}"> 对象,而是访问结果$nomor的第一行,并获取与查询$nomor[0]的列名相对应的属性

答案 1 :(得分:0)

使用->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()将返回stdClass):

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