如何在Laravel Blade中将变量与数据库字段名连接起来?

4

我正在使用Laravel本地化来在两种语言之间切换,并根据所选语言动态检索数据。数据库字段名称为name_en,detail_en(英文)和name_pe,detail_pe(波斯语)。因此,我想从会话中获取en和pe并保存到变量$lng中,然后将其与Blade文件中的数据库字段连接起来。

  @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个回答

3
我认为问题在于您调用对象属性的方式。您想要从$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中的操作。

当然,我很高兴它能帮到你! - EdTan
那最后一段代码中的 $product->{'name_' . $lng} 真是救命稻草!谢谢你。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接