代码之家  ›  专栏  ›  技术社区  ›  LearnProgramming

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

  •  0
  • LearnProgramming  · 技术社区  · 5 年前

    我有两张桌子, furnitures 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 回复  |  直到 5 年前
        1
  •  2
  •   Nabil Farhan    5 年前

    对。它是 可能的 . 但你的做法不好。你应该做的是做一个家具和供应商的数据透视表。

    无论如何,如果您仍然不想更改数据库结构,那么可以按以下方式进行。

    供应商模型

    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中,透视表的约定是按字母顺序组合相关模型的名称。对于您的情况,它是“家具供应商”。但如果你愿意,你可以改变它。

    此外,您还需要更改模型以实现 many to many 关系。