我有2个表,furnitures
和suppliers
。在suppliers
表中有furniture_id
字段,该字段为varchar,因为我将其数据存储在逗号分隔的数据结构中。
供应商模型
public function get_furniture_name()
{
return $this->belongsTo('App\Furniture', 'furniture_id', 'id')
}
控制器
$supplier = Supplier::with('get_furniture_name')->all();
查看
@foreach($supplier as $value)
{{ $value->get_furniture_name->name }}
@endforeach
根据上面的代码,供应商的第一行是否可能显示为chair, desk
?
编辑(针对@Nabil Farhan的答案)
数据透视表意味着我必须这样做吗?
,然后得到这样的结果?
答案 0 :(得分:2)
是的。这是可能。但是你拥有的是一个不好的习惯。您应该做的是制作家具和供应商的数据透视表。
无论如何,如果您仍然不想更改数据库结构,则可以按照以下方式进行。
供应商模型
public function get_furniture_name()
{
$furniture_array = explode(",",$this->furniture_id);
$str = "";
foreach($furniture_array as $furniture_id)
{
$furniture = App\Furniture::find($furniture_id); //If your model name is different then use that.
$str = $str.$furniture->name.",";
}
return $str;
}
查看
@foreach($supplier as $value)
{{ $value->get_furniture_name() }}
@endforeach
此代码将执行的操作是根据字符串创建一个数组。然后将获取每个元素的名称。然后附加它并返回。
P.S。在您的数据库映像中,它被写为furnitture_id
(带有双T)。我认为这是一个错字,并据此编写了代码。
更新:
如果您使用数据透视表,则无需使用pivot_id
列。
您的数据库结构应如下所示,
furnitures: id, name
suppliers: id, name
furniture_supplier: furniture_id, supplier_id
在laravel中,数据透视表的约定是按字母顺序组合相关模型的名称。对于您的情况是“ furniture_supplier”。但是,如果您希望可以更改它。
此外,您将需要更改模型以实现many to many关系。