Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel,是否可以使用Laravel关系查看以逗号分隔的所有名称?_Php_Laravel - Fatal编程技术网

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

Php Laravel,是否可以使用Laravel关系查看以逗号分隔的所有名称?,php,laravel,Php,Laravel,我有两张桌子,家具和供应商。在suppliers表中,有furniture\u id字段,该字段为varchar,因为我将其数据存储在逗号分隔的数据结构中 供应商型号 public function get_furniture_name() { return $this->belongsTo('App\Furniture', 'furniture_id', 'id') } public function get_furniture_name() { $furniture_

我有两张桌子,
家具
供应商
。在
suppliers
表中,有
furniture\u id
字段,该字段为varchar,因为我将其数据存储在逗号分隔的数据结构中

供应商型号

public function get_furniture_name()
{
    return $this->belongsTo('App\Furniture', 'furniture_id', 'id')
}
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;
}
控制器

$supplier = Supplier::with('get_furniture_name')->all();
查看

@foreach($supplier as $value)
    {{ $value->get_furniture_name->name }}
@endforeach
@foreach($supplier as $value)
    {{ $value->get_furniture_name() }}
@endforeach
根据上述代码,供应商的第一行是否可能显示为
椅子、桌子

编辑(针对@Nabil Farhan答案)

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

然后结果是这样的


是的。它是可能的。但是你有一个坏习惯。你应该做的是做一个家具和供应商的透视表

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

供应商型号

public function get_furniture_name()
{
    return $this->belongsTo('App\Furniture', 'furniture_id', 'id')
}
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->name }}
@endforeach
@foreach($supplier as $value)
    {{ $value->get_furniture_name() }}
@endforeach
这段代码将要做的是从字符串生成一个数组。然后将获得每个元素的名称。然后附加它并返回

注意:在您的数据库图像中,它被写入
furniture\u id
(带双T)。我认为这是一个打字错误,并据此编写了代码

更新: 如果使用透视表,则不需要使用
pivot\u id

您的数据库结构应该是这样的

furnitures: id, name
suppliers: id, name
furniture_supplier: furniture_id, supplier_id
在laravel中,透视表的约定是按字母顺序组合相关模型的名称。就您的情况而言,它是“家具供应商”。但如果你愿意,你可以改变它


此外,您还需要更改用于实现关系的模型。

是。它是可能的。但是你有一个坏习惯。你应该做的是做一个家具和供应商的透视表

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

供应商型号

public function get_furniture_name()
{
    return $this->belongsTo('App\Furniture', 'furniture_id', 'id')
}
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->name }}
@endforeach
@foreach($supplier as $value)
    {{ $value->get_furniture_name() }}
@endforeach
这段代码将要做的是从字符串生成一个数组。然后将获得每个元素的名称。然后附加它并返回

注意:在您的数据库图像中,它被写入
furniture\u id
(带双T)。我认为这是一个打字错误,并据此编写了代码

更新: 如果使用透视表,则不需要使用
pivot\u id

您的数据库结构应该是这样的

furnitures: id, name
suppliers: id, name
furniture_supplier: furniture_id, supplier_id
在laravel中,透视表的约定是按字母顺序组合相关模型的名称。就您的情况而言,它是“家具供应商”。但如果你愿意,你可以改变它


此外,您还需要改变实施关系的模式。

我非常同意纳比尔·法汉的观点,@LearnProgramming。在这种情况下,您应该考虑修改DB结构来管理多对多关系。这将更适合您的用例。我以前经历过这种情况,害怕使用透视表,因为我习惯于在数据库中使用逗号分隔的列表。我们有在线所需的所有帮助。您肯定会找到有关透视表的解决方案,以防遇到问题。现在我已经习惯使用它了。首先谢谢你的回答,我用了你的方法,效果很好。现在,我尝试你们建议的数据透视表。根据编辑后的问题,这是正确的吗?我非常同意纳比尔·法汉的观点,@LearnProgramming。在这种情况下,您应该考虑修改DB结构来管理多对多关系。这将更适合您的用例。我以前经历过这种情况,害怕使用透视表,因为我习惯于在数据库中使用逗号分隔的列表。我们有在线所需的所有帮助。您肯定会找到有关透视表的解决方案,以防遇到问题。现在我已经习惯使用它了。首先谢谢你的回答,我用了你的方法,效果很好。现在,我尝试你们建议的数据透视表。根据编辑后的问题,是否正确?