Laravel,是否可以使用laravel关系查看以逗号分隔的所有名称?

时间:2019-02-11 01:47:13

标签: php laravel

我有2个表,furnituressuppliers。在suppliers表中有furniture_id字段,该字段为varchar,因为我将其数据存储在逗号分隔的数据结构中。

enter image description here

供应商模型

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的答案)

数据透视表意味着我必须这样做吗?

enter image description here

,然后得到这样的结果?

enter image description here

1 个答案:

答案 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关系。