从 Laravel 中的多对多关系获取列值
Posted
技术标签:
【中文标题】从 Laravel 中的多对多关系获取列值【英文标题】:Get column value from Many to Many Relationship in Laravel 【发布时间】:2020-04-29 07:20:37 【问题描述】:这是我的表格结构:
Attribute.php
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Attribute extends Model
protected $guarded = [];
public function products()
return $this->belongsToMany('App\Product');
Product.php
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Product extends Model
protected $guarded = [];
public function attributes()
return $this->belongsToMany('App\Attribute');
我想为每一行获取value
列。
我应该在我的控制器中编写什么代码来访问这个value
?
Laravel 版本:6.9.0
谢谢
【问题讨论】:
【参考方案1】:您可以通过添加以下方法结束关系来解决此问题
withPivot(['value']);
public function attributes()
return $this->belongsToMany('App\Attribute')->withPivot(['value']);
还有
public function products()
return $this->belongsToMany('App\Product')->withPivot(['value']);
【讨论】:
不一定是数组,withPivot('value')
可以。这是文档:laravel.com/docs/6.x/eloquent-relationships
嗯,当然,您可以这样做,但是当您需要多列时。检查此文档:laravel.com/docs/6.x/…【参考方案2】:
当我们实现Many To Many关系时,默认创建一个中间表
在您的情况下,该表是
attribute_product
表,我们可以将此表称为Pivot
表。
这些模型通过pivot
属性名称检索此表值,如下所示:
$product = App\Product::find(1);
foreach ($product->attributes as $attribute)
echo $attribute->pivot->product_id;
在(数据透视表)中添加额外的列
默认情况下,attribute_product
表中只会显示模型键 [$attribute_id
,$product_id
]。如果您的pivot
表包含额外的属性,您必须在定义关系时指定它们:
return $this->belongsToMany('App\Attribute')->withPivot('column1', 'column2','value');
将pivot
属性名称更改为您的名字
您可能希望将中间表访问器重命名为 values
而不是 pivot
。
return $this->belongsToMany('App\Attribute')
->as('values')
然后你将通过$attribute->values->product_id
而不是$attribute->pivot->product_id
检索
【讨论】:
以上是关于从 Laravel 中的多对多关系获取列值的主要内容,如果未能解决你的问题,请参考以下文章