我正在使用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
的值,而不是检索数据库字段的值输出在这里:
最佳答案
我认为问题出在调用对象属性的方式上。您想从$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;
,或者可以执行此操作。
您可以从this post引用该操作。