如何在laravel刀片服务器中将变量与数据库字段名称连接起来?

时间:2019-01-04 07:35:26

标签: laravel variables concatenation laravel-blade

我正在使用laravel本地化在两种语言之间切换,并根据所选语言动态检索数据。 数据库字段名称在英语中为name_en, detail_en,在波斯语中为name_pe, detail_pe,所以我想从会话中获取en and pe并保存到变量$lng中,然后将其串联为刀片文件中的数据库字段。

  @php
    $lng = Session::get('local');
    // will return en or pe
    @endphp

@foreach ($products as $product)
<tr>
    <td>
        <input class="self_delall" id="self_delall" type="checkbox" name="delid[]" value="{{ $product->id }}"/>
    </td>
    <td>{{ ++$i }}</td>
    <td>{{ $product->name_.$lng }}</td>
    <td>{{ $product->detail_.$lng }}</td>
    <td>
        <a class="btn btn-info" href="{{ route('products.show',$product->id) }}">Show</a>
        @can('product-edit')
        <a class="btn btn-primary" href="{{ route('products.edit',$product->id) }}">Edit</a>
        @endcan

        @can('product-delete')
            <a class="btn btn-danger" href="delete/{{ $product->id }}/1">Delete</a>
        @endcan
    </td>
</tr>
@endforeach 

因此,它仅返回$lng的值,而不是检索数据库字段的值 输出在这里:enter image description here

1 个答案:

答案 0 :(得分:1)

我认为问题出在调用对象属性的方式上。您想从$product对象中获取 name_en name_pe

当您执行$product->name_.$lng时,实际上发生的是PHP获得$product->name_的值,然后将其与$ lng中的值相加。在这种情况下,$product->name_为NULL并且$ lng为 en pe ,这就是为什么输出为 en pe

因此,解决方案是,您应该使用$product['name_' . $lng]更改调用属性的方式或准备变量$column = 'name_' . $lng; $product->$column;,或者可以执行$product->{'name_' . $lng}

您可以从this post引用该操作。