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结构来管理多对多关系。这将更适合您的用例。我以前经历过这种情况,害怕使用透视表,因为我习惯于在数据库中使用逗号分隔的列表。我们有在线所需的所有帮助。您肯定会找到有关透视表的解决方案,以防遇到问题。现在我已经习惯使用它了。首先谢谢你的回答,我用了你的方法,效果很好。现在,我尝试你们建议的数据透视表。根据编辑后的问题,是否正确?